Reputation: 149
From the following setup.py file, I am trying to create a pure-python wheel from a project that should contain only python 2.7 code.
from setuptools import setup
setup(
name='foo',
version='0.0.1',
description='',
url='',
install_requires=[
'bpython',
'Django==1.8.2',
],
)
However, when I run python setup.py bdist_wheel
the wheel file that is generated is platform specific foo-0.0.1-cp27-none-macosx_10_9_x86_64.whl
wheel file instead of the expected foo-0.0.1-cp27-none-any.whl
. When I try to install this wheel on a different platform it fails saying it is not compatible with this Python
.
I there something I need to change about the setup.py file or python interpreter, perhaps, that will allow this wheel to be used on any platform?
Upvotes: 12
Views: 12847
Reputation: 363304
This part of the filename is controlled by the bdist_wheel
option called python tag:
python2 setup.py bdist_wheel --help | grep python-tag
--python-tag Python implementation compatibility tag (default: 'py2')
However the default is generally 'py2'
(or 'py3'
for a python3 runtime), so to get a platform-specific wheel you must have something else in your configuration that is not shown in the question.
Regardless, you can specify the tag explicitly in your setup file:
from setuptools import setup
setup(
name="foo",
version="0.0.1",
...
options={"bdist_wheel": {"python_tag": "cp27"}},
)
This configuration will create a wheel named foo-0.0.1-cp27-none-any.whl
.
Upvotes: 4
Reputation: 149
Adding the classifiers field to my setup.py fixed this issue.
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',
],
)
Upvotes: 2
Reputation: 76812
The simplistic way is to add --universal
to your commandline, as you can see from running python setup.py bdist_wheel --help
:
--universal make a universal wheel (default: false)
Alternatively you can add a setup.cfg
file next to your setup.py
that
takes care of this:
[bdist_wheel]
universal = 1
If you don't like yet another configuration file clobbering your package,
you can just write such a file in your setup.py
just before it calls setup()
and then remove it after that call returns, this is what I do
in the shared setup.py
for all my projects on PyPI e.g. used in ruamel.yaml.
Upvotes: 11