两个发行版可以提供相同的包吗?
问题描述:
我是PyPi package (or distribution, whatever) called "rewind"的作者。它运送一个名为rewind
的(根)包。两个发行版可以提供相同的包吗?
目前,rewind
包中包含服务器和客户端代码。不过,我正在考虑将代码拆分为两个单独的PyPi包。一个发送,一个rewind.server
包和另一个发送rewind.client
。
我的问题是,可以两个单独的PyPi包提供相同的(根)包,rewind
?
到目前为止我所做的测试似乎告诉我这是不可能的。我的测试创建了两个前置于PYTHONPATH的文件夹。这两个文件夹都包含Python包“mytestpackage”。第一个“mytestpackage”包含模块“a”,第二个包含模块“b”。我只能导入模块“a”或“b”。不是都。
如果可能,我很乐意听到来自Pythonistas的同伴。或者,这是当前Python包实现的限制吗?
答
是的,他们可以,但你需要把代码一块特殊的rewind/__init__.py
文件中的每个包申报其命名空间:
__import__('pkg_resources').declare_namespace(__name__)
,你需要声明的每个包的setup.py
命名空间元数据:
setup(
# ...
namespace_packages = ["rewind"]
)
所有这一切都需要你用setuptools
,它不会与单纯的distutils发行工作。
查看setuptools
的Namespace packages文件。
注:旧的包使用的命名空间声明代码的更详细的版本:
from pkgutil import extend_path
__path__ = extend_path(__path__, __name__)
的declare_namespace()
功能现在负责同样的工作的更简洁。
可能重复[如何在Python中创建命名空间包?](http://*.com/questions/6568223/how-to-create-namespace-packages-in-python) –