我想重构一个我在日常工作中经常使用的python库,将其作为开源发布到github上。在这样做之前,我希望遵循某种python项目结构的最佳实践。我将在下面描述我想做的事情,我将非常感谢你的建议。
下面是我的库(mylib)结构:
mylib/
/examples/
simple_example.py
/mylib/
__init__.py
foo.py
bar.py
/tests/
test_foo.py
test_bar.py
#foo.py
def Foo():
print("foo.Foo")
#bar.py
import foo
def Bar():
print("bar.Bar")
foo.Foo()
#test_bar.py
from ..mylib import bar #doesnt work!
class TestBar(unittest.TestCase):
def test_1(self):
bar.Bar()
self.assertEqual(True, True)
if __name__ == '__main__':
unittest.main()
#simple_example.py
from .. import foo #doesnt work!
from .. import bar #doesnt work!
if __name__ == '__main__':
foo.Foo()
bar.Bar()
$cd myapp
$cd examples
$python simple_example.py
Traceback (most recent call last):
File "simple_example.py", line 2, in <module>
from .. import foo
SystemError: Parent module '' not loaded, cannot perform relative import
$cd myapp
$cd tests
$python test_bar.py
Traceback (most recent call last):
File "test_bar.py", line 3, in <module>
from ..mylib import bar
SystemError: Parent module '' not loaded, cannot perform relative import
3-从mylib根执行所有测试
$cd myapp
$python -m unittest discover tests #same problem as above!
因此,问题出在simple_example.py和test_bar.py中的import语句中。修复这些进口的最佳方法是什么?
注意,我希望使用python标准库unittest进行单元测试。
在运行测试代码时,您希望执行绝对导入。这是因为当您运行单元测试等时,您应该假设您的“库”安装在本地开发模式下进行测试--不要使用相对导入,因为您不在同一个包中。
以下是如何在test_foo.py
文件中进行导入,例如:
# test_foo.py
from mylib.foo import Foo
# ... your test code here
通常,您应该只在库代码中使用相对导入,而不是在测试中=)
$ python setup.py develop
$ pip install -e .
上面的任何一个命令都将检查项目的setup.py
文件,该文件告诉Python如何构建/创建包,并将在本地安装它,以便运行测试/处理它。
问题内容: 我知道实际上没有唯一正确的方法。但是,我发现很难创建一个可以正常工作并且对每个开发人员和管理员都保持整洁的目录结构。github上的大多数项目都有一些标准结构。但是它没有显示在PC上组织另一个文件和所有项目的方法。 在开发机器上组织所有这些目录的最便捷方法是什么?你如何命名它们,以及如何连接并将其部署到服务器? 项目(你正在处理的所有项目) 源文件(应用程序本身) 存储库的工作副本(我
问题内容: 您如何在Web应用程序中组织js和css文件夹? 我当前的项目结构如下: 但是,当我使用许多JavaScript库和CSS插件时,情况会更加复杂。Javascript插件附带其自己的.js文件,有时还附带其自己的.css文件。 例如,当我将JQuery和JQueryUI插件一起使用时,我将jquery.js和jquery-ui.js放在js/lib目录中。但是JQueryUI带有自己的
本文向大家介绍python编码最佳实践之总结,包括了python编码最佳实践之总结的使用技巧和注意事项,需要的朋友参考一下 相信用python的同学不少,本人也一直对python情有独钟,毫无疑问python作为一门解释性动态语言没有那些编译型语言高效,但是python简洁、易读以及可扩展性等特性使得它大受青睐。 工作中很多同事都在用python,但往往很少有人关注它的性能和惯用法,一般都是现学
我读过类似这样的文章,其中建议在提供者端验证存在于使用者的特性分支中的契约,实际上允许在合并到master之前对契约进行“预验证”。然而,我读过来自Pact团队的其他文档,说明了相反的情况。在达到契约涅槃的步骤中,它声明“要在您的提供商的配置项中保持绿色构建,而不是验证最新的整体契约,它应该验证配置项中标记有”master“的最新版本的契约。”在这里,我假设“最新的整体协议”是指发布给协议代理的消
Python 是一个高层次的结合了解释性、编译性、互动性和面向对象的脚本语言。Python 的设计具有很强的可读性,相比其他语言经常使用英文关键字,其他语言的一些标点符号,它具有比其他语言更有特色语法结构。
这里有些给使用和编写 Ansible playbook 的贴士. 你能在我们的 ansible-example repository.找到展示这些最佳实践的 playbook 样例.(注意: 这些示例用的也许不是最新版的中所有特性,但它们仍旧是极佳的参考.) Topics 最佳实践 接下来的章节将向你展示一种组织 playbook 内容方式. 你对 Ansible 的使用应该符合你的需求而不是我们
处理后台任务与常规调用方法有很大的不同。本指南旨在帮助让您的后台任务平稳有效地运行。本文基于 这篇博客文章。 使任务参数小而简单 方法(任务)在调用之前会被序列化。使用 TypeConverter 类将参数转换为 JSON 字符串。如果您有复杂的实体和 / 或大对象; 包括数组,最好将它们放入数据库,然后只将其标识 (id) 传递给后台任务。 错误例子: public void Method(En
VR设计 VR设计不同于平面体验设计。作为一种新的媒介,有新的最佳实践需要遵循,特别是保持用户的舒适性和存在性。这在如下指南中已经写得很透彻了: Oculus VR最佳实践 Leap Motion VR最佳实践指南 一些值得注意的事情: 公共的金科玉律是永远不要意外地把相机控制权从用户手中剥夺。 单位(比如对于位置)应该考虑使用米(m)。这是因为WebVR API以米为单位返回姿势数据,进而传送给