Как создать колесо 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
.