setuptools documentation非常清楚地向命名空间中的__init__.py
文件添加代码:
您不得在命名空间包
__init__.py
中包含任何其他代码和数据。即使它在开发期间似乎有效,或者当项目作为.egg文件安装时,当使用" system"安装项目时它也不起作用。打包工具 - 在这种情况下,不会安装__init__.py
文件,更不用说执行了。
然而,我不明白这些"系统"包装工具。这些是什么?我怎样才能重现__init__.py
文件消失的情况?
答案 0 :(得分:2)
@ Anzel的评论看起来很合适,我说PEP-420证实了这一点。在其Rationale section中,我们读到:
命名空间包旨在支持在多个目录之间进行拆分(因此可以通过多个
sys.path
条目找到)。在此配置中,如果多个部分都提供__init__.py
文件,则无关紧要,只要每个部分正确初始化命名空间包即可。但是, Linux发行商(以及其他)更喜欢将各个部分组合在一起并将它们全部安装到同一个文件系统目录中。这会产生冲突的可能性,因为这些部分现在正在尝试提供相同的部分。目标系统上的文件 - 许多软件包管理器不允许的内容。允许隐式命名空间包意味着可以完全删除提供__init__.py
文件的要求,并且可以将受影响的部分安装到公共目录中,或者在分布看起来合适时拆分多个目录。
所以,是的,我们无法向__init__.py
文件添加任何代码,因为操作系统包管理器(和其他人)更愿意将它们合并到一个目录树中。