如何从单个setup.py构建多个wheel文件?

时间:2018-07-12 01:32:31

标签: python pip python-3.6 python-wheel

在我的项目中,我有一个setup.py文件,该文件使用以下命名空间模式构建多个模块:

from setuptools import setup

setup(name="testmoduleserver",
      packages=["testmodule.server","testmodule.shared"],
      namespace_packages=["testmodule"])

setup(name="testmoduleclient",
      packages=["testmodule.client","testmodule.shared"],
      namespace_packages=["testmodule"])

我正在尝试为两个软件包构建wheel文件。但是,当我这样做时:

python -m pip wheel .

它只会为其中一种定义构建程序包。

为什么只构建一个软件包?

1 个答案:

答案 0 :(得分:2)

即使您要在一个代码库中创建多个程序包,也不能在setuptools.setup()中多次调用setup.py

相反,您需要将所有内容分离为separate namespace packages,并且每个都有一个setup.py(它们都可以驻留在一个Git存储库中!):

testmodule/
    testmodule-client/
        setup.py
        testmodule/
            client/
                __init__.py
    testmodule-server/
        setup.py
        testmodule/
            server/
                __init__.py
    testmodule-shared/
        setup.py
        testmodule/
            shared/
                __init__.py

每个setup.py都包含一些内容

from setuptools import setup

setup(
    name='testmodule-client',
    packages=['testmodule.client'],
    install_requires=['testmodule-shared'],
    ...
)

from setuptools import setup

setup(
    name='testmodule-server',
    packages=['testmodule.server'],
    install_requires=['testmodule-shared'],
    ...
)

from setuptools import setup

setup(
    name='testmodule-shared',
    packages=['testmodule.shared'],
    ...
)

要制造所有三个轮子,然后运行

pip wheel testmodule-client
pip wheel testmodule-server
pip wheel testmodule-shared