来自一个源树的多个分布

时间:2018-02-21 17:41:08

标签: python python-3.x setuptools python-packaging

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

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

现在我要构建三个包app-backendapp-cliapp-common,这些包应该是可分发的并且可以单独使用。 我想将代码保存在一个存储库中,因为我希望将它们保持在一起,但无论如何还没有那么多代码。

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

2 个答案:

答案 0 :(得分:1)

您可以在一个setup()脚本

中拥有多个setup.py命令

在这种情况下,您可以拥有一个/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将构建/安装/打包所有三个python包

答案 1 :(得分:0)

  

我不知道您可以在一个setup.py

中使用多个setup(...)调用。

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

“主设置配置文件setup.py应该包含对setuptools.setup()的单个调用”

虽然setuptools最初没有抱怨,但尝试上载或安装软件包时开始出现问题;一个包的元数据泄漏到后面的包中。