如何创建 Pure-Python 轮

How to create a Pure-Python wheel

从下面的 setup.py 文件中,我试图从一个应该只包含 python 2.7 代码的项目中创建一个纯 python 轮子。

from setuptools import setup

setup(
    name='foo',
    version='0.0.1',
    description='',
    url='',
    install_requires=[
        'bpython',
        'Django==1.8.2',
    ],
)

但是,当我 运行 python setup.py bdist_wheel 时,生成的 wheel 文件是特定于平台的 foo-0.0.1-cp27-none-macosx_10_9_x86_64.whl wheel 文件,而不是预期的 foo-0.0.1-cp27-none-any.whl。当我尝试在不同的平台上安装这个轮子时,它没有显示 it is not compatible with this Python.

我需要对 setup.py 文件或 python 解释器进行一些更改,也许这将使该轮子可以在任何平台上使用?

最简单的方法是将 --universal 添加到您的命令行,正如您可以从 运行 python setup.py bdist_wheel --help:

中看到的
  --universal       make a universal wheel (default: false)

或者您可以在 setup.py 旁边添加一个 setup.cfg 文件 处理这个:

[bdist_wheel]
universal = 1

如果您不喜欢另一个配置文件破坏您的包, 你可以在 setup.py 调用 setup() 之前在你的 setup.py 中写入这样一个文件,然后在调用 returns 之后删除它,这就是我所做的 在共享 setup.py for all my projects on PyPI e.g. used in ruamel.yaml.

将分类器字段添加到我的 setup.py 解决了这个问题。

from setuptools import setup

setup(
    name='foo',
    version='0.0.1',
    description='',
    url='',
    classifiers=[
        'Programming Language :: Python :: 2.7',
    ],
    install_requires=[
        'bpython',
        'Django==1.8.2',
    ],
)

这部分文件名由名为 python tagbdist_wheel 选项控制:

python2 setup.py bdist_wheel --help | grep python-tag
  --python-tag      Python implementation compatibility tag (default: 'py2')

但是默认值通常是 'py2'(或 'py3' 对于 python3 运行时),因此要获得特定于平台的轮子,您的配置中必须有其他东西未在问题中显示。

无论如何,您可以在设置文件中明确指定标签:

from setuptools import setup

setup(
    name="foo",
    version="0.0.1",
    ...
    options={"bdist_wheel": {"python_tag": "cp27"}},
)

此配置将创建一个名为 foo-0.0.1-cp27-none-any.whl 的轮子。