确定在setup.py文件中安装了哪个软件包

时间:2018-07-31 09:26:56

标签: python setuptools 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个单独的存储库)。

非常感谢!

1 个答案:

答案 0 :(得分:0)

我建议您为每个软件包创建一个安装脚本。您可以通过通用的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`.

通过这种方式,用户可以使用相应的安装脚本来选择要安装的软件包。