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

Gre*_*ler 8 python pip python-wheel python-3.6

在我的项目中,我有一个 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"])
Run Code Online (Sandbox Code Playgroud)

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

python -m pip wheel .
Run Code Online (Sandbox Code Playgroud)

它只为定义之一构建包。

为什么只构建一个包?

Nil*_*ner 10

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

相反,您需要将所有内容分离到单独的命名空间包中,并且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
Run Code Online (Sandbox Code Playgroud)

每个都setup.py包含一些类似的东西

from setuptools import setup

setup(
    name='testmodule-client',
    packages=['testmodule.client'],
    install_requires=['testmodule-shared'],
    ...
)
Run Code Online (Sandbox Code Playgroud)

from setuptools import setup

setup(
    name='testmodule-server',
    packages=['testmodule.server'],
    install_requires=['testmodule-shared'],
    ...
)
Run Code Online (Sandbox Code Playgroud)

from setuptools import setup

setup(
    name='testmodule-shared',
    packages=['testmodule.shared'],
    ...
)
Run Code Online (Sandbox Code Playgroud)

要构建所有三个轮子,然后运行

pip wheel testmodule-client
pip wheel testmodule-server
pip wheel testmodule-shared
Run Code Online (Sandbox Code Playgroud)