如果仅遵守一些流行的python约定和标准,您可以做一些事情来改善组织。
如果您搜索此主题,则不可避免地会遇到建议PEP8准则的人们。这些是组织python代码的事实上的规范标准。
模块应使用简短的全小写名称。如果模块名称可以提高可读性,则可以在模块名称中使用下划线。尽管不鼓励使用下划线,但Python软件包也应使用短小写全名。
根据这些准则,您的项目模块应命名为:
foo/ __init__.py foo.py module1.py module2.py module3.py
我发现通常最好避免不必要地导入模块,
__init__.py除非您出于命名空间原因这样做。例如,如果您希望包的名称空间看起来像这样
from foo import Foo
代替
from foo.foo import Foo
然后把
from .foo import Foo
在你的
__init__.py。随着包的变大,某些用户可能不想使用所有子包和模块,因此通过隐式将它们导入到中来强迫用户等待所有这些模块加载是没有意义的
__init__.py。此外,你要考虑你是否甚至想
module1,
module2和
module3为您的外部API的一部分。它们仅由
Foo最终用户使用而不打算供最终用户使用吗?如果它们仅在内部使用,则不要将它们包括在
__init__.py
我还建议使用绝对或显式相对导入来导入子模块。例如,在
foo.py绝对
显式相对from foo import module1from foo import module2from foo import module3
from . import module1from . import module2from . import module3
这样可以防止其他软件包和模块的任何命名问题。如果您决定支持Python3,也将变得更加容易,因为Python3不支持您当前使用的隐式相对导入语法。
另外,您包中的文件通常不应包含
if __name__ == '__main__'
这是因为将文件作为脚本运行意味着该文件将不被视为属于该文件包的一部分,因此将无法进行相对导入。
向用户提供可执行脚本的最佳方法是使用
scripts或
console_scripts功能
setuptools。根据使用的方法,组织脚本的方式可以有所不同,但是我通常这样组织我的脚本:
foo/ __init__.py foo.py ...scripts/ foo_script.pysetup.py
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)