假设我有一个简单的库,该库使用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标记时,wheel忽略了python_requires
中的setuptools
选项(它应为py36
,但默认为py3
)。显然,我意识到我可以从命令行传递--python-tag py36
来完成这项工作,但是我用于部署库的连续部署服务仅使用我正在使用的发行版的名称( bdist_wheel
)。因此,我无法传递任何命令行参数。
经过一些研究,我发现我可以继承bdist_wheel
类并重写python_tag
成员变量,但是根据自述文件:
应注意,不是旨在用作库,因此没有稳定的公共API。
因此,我想避免从bdist_wheel
类继承,这可能会迫使我每次发生重大更改时都重写我的类。
通过setuptools是否有其他方法可以让我传递车轮的Python标记?
答案 0 :(得分:3)
每个distutils
命令的每个命令行参数都可以保留在安装配置文件中。在您的setup.cfg
所在的目录中创建一个名为setup.py
的文件,并将自定义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。
答案 1 :(得分:0)
您可以入侵类似
if 'bdist_wheel' in sys.argv:
if not any(arg.startswith('--python-tag') for arg in sys.argv):
sys.argv.extend(['--python-tag', 'py36'])
但是可以说它同样脆弱...