来自一个源代码树的多个分布

Multiple distributions from one source tree

我有一个看起来像这样的源代码树:

/app/backend/module.py
/app/cli/module.py
/app/common/module.py

现在我想构建三个包,app-backendapp-cliapp-common,它们应该是可分发的并且可以单独使用。 我想将代码保存在一个存储库中,因为我想将所有东西放在一起,而且代码还不是很多。

使用 setuptools 执行此操作的最标准和面向未来的方法是什么(或者是否有更合适的方法)?我不是为 Python 2.7 或类似版本构建的,如果它只适用于最新的工具,我会很好。

您可以在单个 setup.py 脚本中包含多个 setup() 命令

在这种情况下,您可以有一个 /app/setup.py 脚本

from setuptools import setup, find_packages

version = '1.0.0'

setup(
    name='app-backend',
    version=version,
    packages=find_packages(exclude=['cli', 'common']),
)

setup(
    name='app-cli',
    version=version,
    packages=find_packages(exclude=['backend', 'common']),
)

setup(
    name='app-common',
    version=version,
    packages=find_packages(exclude=['backend', 'cl']),
)

运行 python setup.py COMMAND 将 build/install/package 所有三个 python 包裹

I didn’t know that you could use multiple setup(…) calls in one setup.py

你不能,这是无效的。请参阅以下位置的文档: https://python-packaging.readthedocs.io/en/latest/minimal.html

"The main setup config file, setup.py, should contain a single call to setuptools.setup()"

虽然 setuptools 最初没有抱怨,但当您尝试上传或安装包时,问题开始出现;一个包元数据泄漏到后者。