python命名空间包的当前状态

时间:2013-10-28 14:44:19

标签: python distutils

我想在主模块中有几个python子模块,但我想将它们作为单独的python包分发。所以包A应该提供'my_data.source_a',包B应该提供'my_data.source_b',......等等。

我发现我必须使用命名空间包,但是试图弄清楚细节,我找到了多个PEP来解决这个问题。 PEP 420似乎是最新的,它建立在PEP 402和PEP 382之上。

对我而言,目前还不清楚实施的不同PEP的状态。所以我的问题是:http://pythonhosted.org/distribute/setuptools.html#namespace-packages仍然是要走的路,或者我应该如何构建我的命名空间包?

2 个答案:

答案 0 :(得分:5)

Python的最新版本Python 3.7使用native namespace packages方法创建在PEP 420中定义的名称空间包。

当前有三种创建名称空间包的方法:

  1. 使用native namespace packages。这种类型的名称空间包在PEP 420中定义,并且在Python 3.3和更高版本中可用。如果您的命名空间中的软件包仅需要支持Python 3并通过pip安装,则建议使用此方法。
  2. 使用pkgutil-style namespace packages。对于需要支持Python 2和3并同时通过pippython setup.py install安装的新软件包,建议使用此方法。
  3. 使用pkg_resources-style namespace packages。如果您需要与已经使用该方法的软件包兼容,或者您​​的软件包需要使用zip安全,则建议使用此方法。

参考:Packaging namespace packages

答案 1 :(得分:1)

对于Python 3.3+,PEP 420 -- Implicit Namespace Packages是可行的方法。

只需从两个包中删除 __ init __。py ,然后添加

setup(
    ...
    namespace_packages=['package_name']
    ...
)

setup.py 。 查看示例here