pep 420 namespace_packages purpose in setup.py



使用 PEP420 命名空间包(没有 __init__.py 的包(时,setup.py 中namespace_packages参数的目的是什么?

我玩了一下,发现我是否声明命名空间包没有区别。 "setup.py 安装"和"pip install "。 无论如何都有效。

我正在构建一个自动 setup.py 代码生成器,如果没有必要,我很乐意不处理这个问题。

只要你:

  • 目标是 Python 3.3 及更高版本或安装了importlib2依赖项的 Python 2.7(Python 2 的importlib向后移植(,
  • 使用最新版本的setuptools进行打包(我认为它应该是 28.8 或更高版本(
  • 并使用最新的pip版本进行安装(9.0 及更高版本就可以了,8.1.2 可能也可以工作,但您应该自己测试(,

您是安全的,可以安全地省略namespace_packages关键字 arg 在安装脚本中。

GitHub 上有一个名为sample-namespace-packages的 PyPA 官方存储库,其中包含一套测试,适用于安装包含每种命名空间包的发行版的不同可能场景。如您所见,使用隐式命名空间包的示例包在其安装脚本中不使用namespace_packagesarg(这里是其中一个脚本(,并且所有类型的测试都pep420cross_pep420_pkgutil在 Python 3 上传递;这是完整的结果表。

命名空间包是在一个顶级名称下安装的单独包。

通常两个不同的包(例如SQLObject和Cheetah3(会安装两个(或更多(不同的顶级包(在我的示例中sqlobjectCheetah(。

但是,如果我有一个库,我想将其拆分为多个部分并允许在没有库的其余部分的情况下安装这些部分怎么办?我使用命名空间包。示例:这两个包是一个库的两个部分:m_lib 和 m_lib.defenc。一个安装可以单独使用的m_lib/defenc.py,另一个安装m_lib库的其余部分。为了一次安装整个库,我还提供了 m_lib.full。

附言。所有提到的包都是我的。源代码在Github或我的个人git主机上提供。

相关内容

最新更新