栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

模块导入和__init__.py在Python中

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

模块导入和__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


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/638972.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号