9

从下面的 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.whlwheel 文件,而不是预期的foo-0.0.1-cp27-none-any.whl. 当我尝试在不同的平台上安装这个轮子时,它失败了it is not compatible with this Python

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

4

3 回答 3

11

最简单的方法是添加--universal到命令行,正如您从运行中看到的那样python setup.py bdist_wheel --help

  --universal       make a universal wheel (default: false)

或者,您可以在setup.cfg您的旁边添加一个文件来setup.py处理此问题:

[bdist_wheel]
universal = 1

如果你不喜欢另一个配置文件破坏你的包,你可以setup.py在它调用之前在你的文件中写一个这样的文件,setup()然后在调用返回后删除它,这就是我setup.py在 PyPI 上的所有项目的共享中所做的例如在ruamel.yaml中使用。

于 2016-01-31T09:26:12.060 回答
1

将分类器字段添加到我的 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',
    ],
)
于 2016-02-01T20:02:14.057 回答
1

这部分文件名由bdist_wheel名为python tag的选项控制:

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.

于 2021-11-16T18:36:29.497 回答