pep 420 setup.py 中的namespace_packages用途

问题描述 投票:0回答:2

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

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

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

python setuptools distutils
2个回答
2
投票

只要你:

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

为了安全起见,您可以放心地在设置脚本中省略

namespace_packages
关键字参数。

GitHub 上有一个名为 sample-namespace-packages

PyPA 官方存储库,其中包含针对已安装的发行版的不同可能场景的测试套件,其中包含各种名称空间包。如您所见,使用隐式名称空间包的示例包在其设置脚本中不使用
namespace_packages
arg(这里是其中一个脚本),并且
pep420
cross_pep420_pkgutil
类型的所有测试都通过在 Python 3 上;这是完整的结果表


0
投票

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

通常两个不同的包(例如SQLObjectCheetah3)安装两个(或更多)不同的顶级包(在我的示例中为

sqlobject
Cheetah
)。

但是,如果我有一个库,我想将其分成几个部分并允许安装这些部分而不需要库的其余部分,该怎么办?我使用命名空间包。示例:这两个包是一个库的 2 个部分:m_libm_lib.defenc。一个安装可以单独使用的

m_lib/defenc.py
,另一个安装
m_lib
库的其余部分。要立即安装整个库,我还提供了 m_lib.full

PS。所有提到的包都是我的。源代码在 Github我的个人 git 托管 提供。

© www.soinside.com 2019 - 2024. All rights reserved.