python - pep 420 namespace_packages setup.py 中的用途
问题描述
使用 PEP420 命名空间包(没有 __init__.py 的那些)时 setup.py中的namespace_packages参数的目的是什么?
我玩过它,发现我是否声明了命名空间包没有区别。“setup.py install”和“pip install”。在任何情况下都有效。
我正在构建一个自动 setup.py 代码生成器,如果没有必要,我很乐意不处理这个。
解决方案
只要你:
- 针对 Python 3.3 和更新版本或
importlib2
安装了依赖项的 Python 2.7(importlib
Python 2 的反向移植), - 使用最新版本的
setuptools
包装(我认为应该是 28.8 或更高版本) - 并使用最新
pip
版本进行安装(9.0 和更高版本会很好,8.1.2 可能也可以,但你应该自己测试),
你是安全的,可以安全地在你的设置脚本中省略namespace_packages
关键字 arg。
GitHub上有一个名为 PyPA 的官方存储库sample-namespace-packages
,其中包含一套测试,适用于已安装的不同可能场景的发行版,其中包含各种命名空间包。如您所见,使用隐式命名空间包的示例包namespace_packages
在其设置脚本(这里是其中一个脚本)和所有类型测试中不使用 argpep420
并cross_pep420_pkgutil
通过 Python 3;这是完整的结果表。