我有一个大型项目,我想分成多个单独的可安装软件包。当前的布局是:
├── MANIFEST.in
├── readme.md
├── package
| ├── __int__.py
│ ├── a
│ │ ├── __init__.py
│ │ └── a.py
│ ├── b
│ │ ├── __init__.py
│ │ └── b.py
│ └── c
│ ├── __init__.py
│ ├── resources
│ │ └── log.png
│ └── c.py
└── setup.py
在这种情况下,我们的package.c取决于package.b,而package.b取决于package.a。 package.a使用“ toml”,package.b使用“ wxPython”,package.c使用“ numpy”。
现在,package.a是最常用的软件包,我试图将它们分开,以便用户只能安装package.a,并避免安装package.b和package.c的开销,除非他们需要这些功能这些软件包提供的信息。
现在,在顶级setup.py
中,我们有:
#!/usr/bin/env python3
from setuptools import setup, find_packages
VERSION = '1.0.0'
REQUIRED_PACKAGES = ['toml', 'wxPython', 'numpy']
setup(
name='user_package',
description="User utilities",
version=VERSION,
packages=find_packages(),
include_package_data=True,
author='User',
author_email='user@user.com',
install_requires=REQUIRED_PACKAGES
)
我正在尝试将其移至名称空间包。为此,我删除了package/__init__.py
并用以下内容更新了setup.py
:
from setuptools import setup, find_namespace_packages
VERSION = '1.0.0'
REQUIRED_PACKAGES = ['toml']
setup(
name='package-a',
description="User utilities",
version=VERSION,
packages=find_namespace_packages(include=['package.a']),
include_package_data=True,
author='User',
author_email='user@user.com',
install_requires=REQUIRED_PACKAGES
)
这很好地打包了package.a。因此,尽管我可以多次调用setup
,每个包一个,每个包都有自己的依赖项列表:
for i in ['a', 'b', 'c']:
setup(
name=f'package-{i}',
...
packages=find_namespace_packages(include=[f'package.{i}']),
...
install_requires=REQUIRED_PACKAGES[i] # Where REQUIRED_PACKAGES is a dict() of str:list
)
但这在随后的设置调用中失败。
我仍然不知道如何根据'package.c'来描述'package.c',尽管我怀疑如果将{package-b'添加到install_requires
列表中,它将可以它。
在我看来,这可能是关于如何生成轮子并通过PyPi提供单独的软件包的误解。
所以,我想这可以归结为两个问题: