模块导入和__init__.py在Python中

模块导入和__init__.py在Python中,第1张

模块导入和__init__.py在Python中

如果仅遵守一些流行的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


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5644780.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-16
下一篇 2022-12-16

发表评论

登录后才能评论

评论列表(0条)

保存