3

我是名为 "rewind" 的 PyPi 包(或发行版,等等)的作者。它附带一个(根)包,名为rewind.

目前,该rewind包包含服务器和客户端代码。但是,我正在考虑将代码拆分为两个单独的 PyPi 包。一个送货,一个rewind.server包裹,另一个送货rewind.client

我的问题是,两个单独的 PyPi 包可以提供相同的(根)包rewind吗?

到目前为止我所做的测试似乎告诉我这是不可能的。我的测试创建了两个附加到 PYTHONPATH 的文件夹。这两个文件夹都包含 Python 包“mytestpackage”。第一个“mytestpackage”包含模块“a”,第二个包含模块“b”。我只能导入模块“a”或“b”。不是都。

如果可能的话,我很想听听 Pythonistas 同伴的意见。或者,这是当前 Python 包实现的限制吗?

4

1 回答 1

2

rewind/__init__.py是的,他们可以,但是您需要在每个包的文件中放置一段特殊的代码,以将其声明为命名空间:

__import__('pkg_resources').declare_namespace(__name__)

并且您需要在每个包的setup.py元数据中声明命名空间:

setup(
    # ...
    namespace_packages  = ["rewind"]
)

所有这一切都需要您使用setuptools,它不适用于单纯的 distutils 发行版。

参阅setuptools. _

注意:较旧的包使用了更详细的命名空间声明代码:

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

declare_namespace()功能现在更简洁地处理相同的工作。

于 2012-09-20T07:39:38.613 回答