我是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包实现的限制吗?
答案 0 :(得分:2)
是的,他们可以,但你需要在每个包的rewind/__init__.py
文件中放一段特殊的代码来声明它是一个命名空间:
__import__('pkg_resources').declare_namespace(__name__)
并且您需要在每个包的setup.py
元数据中声明命名空间:
setup(
# ...
namespace_packages = ["rewind"]
)
所有这些都要求您使用setuptools
,它不适用于仅仅是distutils发行版。
请参阅setuptools
的{{3}}文档。
注意:较旧的包使用了更详细的命名空间声明代码版本:
from pkgutil import extend_path
__path__ = extend_path(__path__, __name__)
declare_namespace()
函数现在可以更简洁地处理相同的工作。