Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 来自一个源树的多个分布_Python_Python 3.x_Setuptools_Python Packaging - Fatal编程技术网

Python 来自一个源树的多个分布

Python 来自一个源树的多个分布,python,python-3.x,setuptools,python-packaging,Python,Python 3.x,Setuptools,Python Packaging,我有一个源代码树,看起来像这样: /app/backend/module.py /app/cli/module.py /app/common/module.py 现在我想构建三个包,app-backend、app-cli和app-common,它们应该是可分发的,并且可以单独使用。 我希望将代码保存在一个存储库中,因为我希望将所有东西都保存在一起,而且它还没有那么多代码 使用setuptools实现这一点最标准、最经得起未来考验的方法是什么(或者是否有更好的方法)?我不是为Python2.7或

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

/app/backend/module.py
/app/cli/module.py
/app/common/module.py
现在我想构建三个包,
app-backend
app-cli
app-common
,它们应该是可分发的,并且可以单独使用。 我希望将代码保存在一个存储库中,因为我希望将所有东西都保存在一起,而且它还没有那么多代码


使用setuptools实现这一点最标准、最经得起未来考验的方法是什么(或者是否有更好的方法)?我不是为Python2.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命令
将构建/安装/打包所有三个python包


我不知道您可以在一个setup.py中使用多个setup(…)调用

不能,这是无效的。请参阅以下位置的文档:

主安装配置文件setup.py应包含对setuptools.setup()的单个调用


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

我不知道您可以在一个
setup.py
中使用多个
setup(…)
调用-您可以提供到文档的链接吗?我根据您的答案实现了一个解决方案,其中包含多个可单独使用的
setup.py
文件,以及一个位于base dir中的
setup.py
,通过
run\u path
模块使用其他文件。