从 setup.py 构建万向轮

Build a universal wheel from setup.py

如何从 setup.py 构建万向轮?我不希望每次都传递 --universal 选项,或者只为这个选项创建一个 setup.cfg 文件。

我知道 中的解决方法,但是是否有一种干净的方法可以在不临时创建 setup.cfg 文件的情况下执行此操作?

您可以使用 script_args 选项到 setup() 来覆盖命令行。所以你可以这样做:

import sys
from setuptools import setup
setup(script_args=sys.argv[1:]+['--universal'])

这不是特别优雅,但可能比创建一个临时文件更不难看 setup.cfg

setup.py 的 setup() 支持 options 参数来将选项传递给任何命令。它是命令名称和命令选项的字典。您可以通过提供 strtobool 例如

接受的任何真值来指示它构建万向轮
setup(options={'bdist_wheel':{'universal':'1'}})

setup(options={'bdist_wheel':{'universal':True}})

另见 https://github.com/python/cpython/blob/master/Lib/distutils/dist.py#L247

如果您只想制作一个 Python 3 兼容轮,则无需传递任何参数。如果轮子是在 Python 3 解释器中构建的,它将自动被标记为 py3。