如何在PyPi的根包下组织包?

2024-09-30 20:31:58 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一些或多或少独立的包(见下面的apack和bpack)。我希望它们都能这样提供:

import mycompany.apack.somemodule
import mycompany.bpack.somemodule

既然他们是独立的,我就分开了设置.py它们中的每一个都将它们部署到PyPi中,因此不同的发布周期也不同。在

这里有一个问题:是否可以使用单独的发布过程来拥有根包的子包(每个子包都有自己的子包)设置.py)? 如何做到这一点?

我试过了,但没能成功。 我的电流设置.py看起来像这样:

^{pr2}$

这些设置.py正在dist packages文件夹中创建以下结构:

^{3}$

现在,由于我的mycompany没有\uuuinit\uuuy.py(这是我的猜测),我得到以下错误:

>>> import mycompany.apack.somemodule
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ImportError: No module named mycompany.apack.somemodule

Tags: pyimportpypi过程packagesdist部署电流
1条回答
网友
1楼 · 发布于 2024-09-30 20:31:58

简短回答

使用setuptools项目中的pkg_resources.declare_namespace。在

冗长的回答

您可以使用setuptools而不是distutils。它支持依赖关系管理和名称空间

对于apack,项目结构如下所示:

/apack/
 |- mycompany/
 |   |- __init__.py (1)
 |   `- apack/
 |       |- __init__.py
 |       `- submodule.py
 `- setup.py

对于apack,您的setup.py将如下所示:

^{pr2}$

标记为(1)的__init__.py将如下所示:

import pkg_resources
pkg_resources.declare_namespace(__name__)

bpack看起来非常相似,只是用apack替换为bpack。在

假设还有一个cpack,它依赖于apack和bpack。在

它看起来很相似,但setup.py将如下所示:

from setuptools import find_packages
from setuptools import setup

setup(
    name='cpack',
    version='0.1',
    packages=find_packages(),
    install_requires=['apack', 'bpack'])

如果安装了cpack,则也将安装apack和bpack。 由于命名空间声明,因此不会发生冲突

$ virtualenv venv
$ source virtualenv/bin/activate
$ pip install cpack
$ python
>>> from mycompany.apack import submodule
>>> from mycompany.bpack import submodule
>>> from mycompany.cpack import submodule

相关问题 更多 >