如何使用setuptools将Python标签添加到bdist_wheel命令?

时间:2018-10-02 13:59:02

标签: python setuptools continuous-deployment python-wheel

假设我有一个简单的库,该库使用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标记?

2 个答案:

答案 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'])

但是可以说它同样脆弱...