如何在Python中创建命名空间包?

问题:

在Python中,命名空间包允许您在多个项目之间传播Python代码。当您要将相关的库作为单独的下载发布时,这很有用。例如,PYTHONPATH中的目录Package-1Package-2

Package-1/namespace/__init__.py
Package-1/namespace/module1/__init__.py
Package-2/namespace/__init__.py
Package-2/namespace/module2/__init__.py

最终用户可以import namespace.module1import namespace.module2
什么是定义命名空间包的最佳方式,因此多个Python产品可以在该命名空间中定义模块?

回答:

有一个标准模块,称为pkgutil,您可以使用它
可以’附加’模块到给定的命名空间。
使用您提供的目录结构:

Package-1/namespace/__init__.py
Package-1/namespace/module1/__init__.py
Package-2/namespace/__init__.py
Package-2/namespace/module2/__init__.py

您应该将这两行放在Package-1/namespace/__init__.pyPackage-2/namespace/__init__.py(*)中:

from pkgutil import extend_path
__path__ = extend_path(__path__, __name__)

(*既然你说出他们之间的依赖 – 你不知道其中哪一个将被首先被认可 – 有关更多信息,请参见PEP 420
正如documentation所说:

这将添加到软件包的__path__所有目录在sys.path上的目录命名的子目录。

从现在开始,您应该可以独立分发这两个包。

 
 
Code问答: http://codewenda.com/topics/python/
Stackoverflow: How do I create a namespace package in Python?

*转载请注明本文链接以及stackoverflow的英文链接

发表评论

电子邮件地址不会被公开。 必填项已用*标注

69 − = 68