Как создать колесо Pure-Python

Из следующего файла setup.py я пытаюсь создать колесо чистого Python из проекта, который должен содержать только код Python 2.7.

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 генерируемый файл колеса зависит от платформы foo-0.0.1-cp27-none-macosx_10_9_x86_64.whl Колесо файла вместо ожидаемого foo-0.0.1-cp27-none-any.whl, Когда я пытаюсь установить это колесо на другую платформу, он не говорит it is not compatible with this Python,

Мне нужно что-то изменить в файле setup.py или в интерпретаторе python, возможно, это позволит использовать это колесо на любой платформе?

3 ответа

Решение

Добавление поля классификаторов в мой файл 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',
    ],
)

Упрощенный способ заключается в добавлении --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.

Эта часть имени файла контролируется bdist_wheelопция, называемая тегом python :

      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.

Другие вопросы по тегам