使用 PEP420 命名空间包(没有 __init__.py 的包)时,setup.py 中的 namespace_packages 参数的用途是什么?
我玩了一下,发现无论我是否声明命名空间包,没有区别。 “setup.py install”和“pip install”。无论如何都有效。
我正在构建一个自动 setup.py 代码生成器,如果没有必要,我很乐意不处理这个问题。
最佳答案
只要你:
- 目标是安装了
importlib2
依赖项的 Python 3.3 及更高版本或 Python 2.7(Python 2 的importlib
向后移植), - 使用最新版本的
setuptools
进行打包(我认为应该是28.8或更高版本) - 并使用最新的
pip
版本进行安装(9.0 及更高版本就可以了,8.1.2 可能也可以工作,但您应该自己测试一下),
出于安全考虑,您可以放心地在安装脚本中省略 namespace_packages
关键字参数。
有一个PyPA's official repository named sample-namespace-packages
on GitHub其中包含针对已安装的发行版的不同可能场景的一组测试,其中包含每种 namespace 包。如您所见,使用隐式命名空间包的示例包在其设置脚本中不使用 namespace_packages
arg(此处为 one of the scripts )以及 pep420
类型的所有测试code> 和 cross_pep420_pkgutil 在 Python 3 上传递;这是the complete results table .
关于python - pep 420 setup.py 中的namespace_packages用途,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50280138/