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

Arn*_*rah 6 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'
)
Run Code Online (Sandbox Code Playgroud)

现在,当我运行时python setup.py bdist_wheel,我得到一个名为something-0.0.1-py3-none-any.whl. 在这里很明显,python_requiressetuptools确定我的轮子的 Python 标签时,wheel 忽略了选项(它应该是py36但默认的py3)。显然,我意识到我可以--python-tag py36从命令行传入,这将完成这项工作,但是我用于部署我的库的持续部署服务只接受我正在使用的发行版的名称 ( bdist_wheel)。因此,我无法传递任何命令行参数。

经过一番研究,我发现我可以从bdist_wheel类继承并覆盖python_tag成员变量,但是根据wheel README:

应该注意的是,wheel打算用作库,因此没有稳定的公共 API。

因此,我想避免从bdist_wheel类继承,这可能会迫使我在每次发生重大更改时重写我的类。

有没有其他方法可以通过 setuptools 传递轮子的 Python 标签?

hoe*_*ing 8

每个命令的每个命令行参数都distutils可以保存在安装配置文件中。setup.cfg在您setup.py所在的同一目录中创建一个文件,并将自定义bdist_wheel配置存储在其中:

# setup.cfg
[bdist_wheel]
python-tag=py36
Run Code Online (Sandbox Code Playgroud)

现在 runningpython setup.py bdist_wheel将与 running 基本相同python setup.py bdist_wheel --python-tag py36

distutils文档中的相关文章:编写设置配置文件

  • 也可以直接在“setup.py”中指定它,以避免“setup.cfg”文件弄乱项目目录。请参阅[如何创建纯Python轮](/sf/answers/4899611321/)。 (3认同)