首页 > 解决方案 > 决定在 setup.py 文件中安装哪个包

问题描述

为了这个问题,让我们假设在一个 git 存储库下,我正在开发 2 个独立的包。考虑以下结构:

my_repo/

    package1/
        ...some modules

    package2/
        ...some modules

    setup.py

setup.py 代码是:

from setuptools import setup

setup(
    name='Cool_package',
    version=1.0,
    description='...',
    author='Myself',
    packages=['package1', 'package2'],
    install_requires=[
                      ...
                     ]
    )

我正在使用此命令以所需的方式安装软件包(避免 python setup.py 安装或开发):

pip install -e .

并且 package1 和 package2 都已安装。

我的问题是,考虑到上述结构要求他们共享一个 setup.py 文件,有没有办法只安装两者中的一个(用户决定哪一个)?

同样,我知道这种结构并不理想(理想情况下,我会将包分成 2 个单独的存储库)。

提前谢谢了!

标签: pythonsetuptoolssetup.py

解决方案


我建议您为每个包创建一个安装脚本。您可以通过通用setup.py脚本共享通用信息,如下所示:

repo/
├── bar
├── foo
├── setup_bar.py
├── setup_foo.py
└── setup.py

2 directories, 3 files

然后公共setup.py文件将包含以下代码。它也可以用于一次安装两个包:

from functools import partial
from setuptools import setup

setup = partial(
    setup,
    name='Cool_package',
    version=1.0,
    description='...',
    author='Myself',
    packages=['foo', 'bar']
)

if __name__ == '__main__':
    setup()

单独的setup_*.py脚本将重用该信息并且只安装一个包:

from setup import setup

setup(packages=['foo'])  # For `setup_foo.py`.
setup(packages=['bar'])  # For `setup_bar.py`.

这样,用户可以使用相应的安装脚本来选择要安装的软件包。


推荐阅读