【问题标题】:How to create a Pure-Python wheel如何创建一个纯 Python 轮子
【发布时间】:2015-10-12 22:00:54
【问题描述】:

从下面的 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 标志创建包时,both bdist.macosx-10.7-x86_64 directory 和 @987654328 @ 文件 被创建。 (我的包是通用的 2/3,而不是特定于平台的。)我很好奇这是否应该在所有运行正常时发生,或者它们是否都应该结束...-py2.py3-none-any.whl。有人知道吗?

标签: python setup.py python-wheel


【解决方案1】:

这部分文件名由名为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 的轮子。

【讨论】:

    【解决方案2】:

    将分类器字段添加到我的 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',
        ],
    )
    

    【讨论】:

      【解决方案3】:

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

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

      或者,您可以在您的 setup.py 旁边添加一个 setup.cfg 文件 照顾这个:

      [bdist_wheel]
      universal = 1
      

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

      【讨论】:

      • 问题不是问如何制作万向轮。
      猜你喜欢
      • 2018-05-26
      • 2014-12-27
      • 2020-06-08
      • 2016-06-08
      • 2017-03-14
      • 2020-05-06
      • 1970-01-01
      相关资源
      最近更新 更多