如何使用 setuptools 将 Python 标记添加到 bdist_wheel 命令?
How do I add a Python tag to the bdist_wheel command using setuptools?
假设我有一个简单的库,它使用 setuptools 进行打包和分发。本例中的库还需要 Python 3.6 的最低版本,这意味着我的 setup.py 将如下所示:
from setuptools import setup, find_packages
setup(
name='something',
version='0.0.1',
description='description',
long_description=long_description,
# More metadata
packages=find_packages(exclude=['tests', 'docs']),
python_requires='>=3.6'
)
现在,当我 运行 python setup.py bdist_wheel
时,我得到一个名为 something-0.0.1-py3-none-any.whl
的文件。在这里很明显,在确定我的车轮的 Python 标签时,车轮忽略了 setuptools
中的 python_requires
选项(它应该是 py36
但默认为 py3
).显然,我意识到我可以从命令行传入 --python-tag py36
,这将完成这项工作,但是我用于部署我的库的持续部署服务只采用我正在使用的发行版的名称( bdist_wheel
)。因此,我无法传递任何命令行参数。
经过一些研究,我发现我可以从 bdist_wheel
class 继承并覆盖 python_tag
成员变量,但是根据 wheel README:
It should be noted that wheel is not intended to be used as a library, and as such there is no stable, public API.
因此,我想避免从 bdist_wheel
class 继承,这可能会迫使我在每次发生重大更改时重写 class。
有没有其他方法可以通过 setuptools 传递轮子的 Python 标签?
你可以破解类似
if 'bdist_wheel' in sys.argv:
if not any(arg.startswith('--python-tag') for arg in sys.argv):
sys.argv.extend(['--python-tag', 'py36'])
但可以说它同样脆弱...
每个 distutils
命令的每个命令行参数都可以保存在设置配置文件中。在 setup.py
所在的同一目录中创建一个名为 setup.cfg
的文件,并将自定义 bdist_wheel
配置存储在其中:
# setup.cfg
[bdist_wheel]
python-tag=py36
现在 运行 python setup.py bdist_wheel
将与 运行 python setup.py bdist_wheel --python-tag py36
.
基本相同
distutils
文档中的相关文章:Writing the Setup Configuration File。
假设我有一个简单的库,它使用 setuptools 进行打包和分发。本例中的库还需要 Python 3.6 的最低版本,这意味着我的 setup.py 将如下所示:
from setuptools import setup, find_packages
setup(
name='something',
version='0.0.1',
description='description',
long_description=long_description,
# More metadata
packages=find_packages(exclude=['tests', 'docs']),
python_requires='>=3.6'
)
现在,当我 运行 python setup.py bdist_wheel
时,我得到一个名为 something-0.0.1-py3-none-any.whl
的文件。在这里很明显,在确定我的车轮的 Python 标签时,车轮忽略了 setuptools
中的 python_requires
选项(它应该是 py36
但默认为 py3
).显然,我意识到我可以从命令行传入 --python-tag py36
,这将完成这项工作,但是我用于部署我的库的持续部署服务只采用我正在使用的发行版的名称( bdist_wheel
)。因此,我无法传递任何命令行参数。
经过一些研究,我发现我可以从 bdist_wheel
class 继承并覆盖 python_tag
成员变量,但是根据 wheel README:
It should be noted that wheel is not intended to be used as a library, and as such there is no stable, public API.
因此,我想避免从 bdist_wheel
class 继承,这可能会迫使我在每次发生重大更改时重写 class。
有没有其他方法可以通过 setuptools 传递轮子的 Python 标签?
你可以破解类似
if 'bdist_wheel' in sys.argv:
if not any(arg.startswith('--python-tag') for arg in sys.argv):
sys.argv.extend(['--python-tag', 'py36'])
但可以说它同样脆弱...
每个 distutils
命令的每个命令行参数都可以保存在设置配置文件中。在 setup.py
所在的同一目录中创建一个名为 setup.cfg
的文件,并将自定义 bdist_wheel
配置存储在其中:
# setup.cfg
[bdist_wheel]
python-tag=py36
现在 运行 python setup.py bdist_wheel
将与 运行 python setup.py bdist_wheel --python-tag py36
.
distutils
文档中的相关文章:Writing the Setup Configuration File。