4

setuptools文档非常明确地将代码__init__.py从命名空间添加到文件中:

您不得在命名空间包的__init__.py. 即使它在开发过程中似乎可以工作,或者当项目安装为 .egg 文件时,当使用“系统”打包工具安装项目时,它就无法工作——在这种情况下,__init__.py文件将不会被安装,更不用说执行了.

然而,我不明白这些“系统”打包工具是什么。这些是什么?__init__.py我怎样才能重现文件消失的这种情况?

4

1 回答 1

2

@Anzel 的评论看起来是一个很好的答案,我想说PEP-420证实了这一点。在其基本原理部分,我们读到:

命名空间包旨在支持跨多个目录拆分(因此可以通过多个sys.path条目找到)。在这种配置中,多个部分是否都提供一个文件并不重要__init__.py,只要每个部分正确初始化命名空间包即可。但是,Linux 发行版供应商(以及其他)更喜欢将单独的部分组合起来,并将它们全部安装到同一个文件系统目录中。这会产生潜在的冲突,因为这些部分现在正试图在目标系统上提供相同的文件——这是许多包管理器所不允许的。允许隐式命名空间包意味着需要提供一个__init__.py文件可以完全删除,受影响的部分可以安装到一个公共目录中,也可以根据发行版的需要拆分到多个目录中。

所以是的,我们不能向我们的__init__.py文件添加更多代码,因为操作系统包管理器(和其他人)更愿意将它们合并到一个目录树中。

于 2014-12-31T21:45:54.753 回答