diff options
author | Paul Moore <p.f.moore@gmail.com> | 2014-03-22 15:08:16 +0000 |
---|---|---|
committer | Paul Moore <p.f.moore@gmail.com> | 2014-03-22 15:08:16 +0000 |
commit | 90f7aeb1572f05aadefc9bd1de0399cc540f6b6b (patch) | |
tree | 3018251f8040e9cdba77f4115d03761b91aed0e6 | |
parent | c1826b74eb031270fe1218ee55c9ebc5997b2bf5 (diff) | |
download | wheel-90f7aeb1572f05aadefc9bd1de0399cc540f6b6b.tar.gz |
Add a --python-tag argument for bdist_wheel
-rw-r--r-- | wheel/bdist_wheel.py | 21 | ||||
-rw-r--r-- | wheel/test/test_tagopt.py | 112 |
2 files changed, 123 insertions, 10 deletions
diff --git a/wheel/bdist_wheel.py b/wheel/bdist_wheel.py index c63f291..1922b3b 100644 --- a/wheel/bdist_wheel.py +++ b/wheel/bdist_wheel.py @@ -77,6 +77,9 @@ class bdist_wheel(Command): ('universal', None, "make a universal wheel" " (default: false)"), + ('python-tag=', None, + "Python implementation compatibility tag" + " (default: py%s)" % get_impl_ver()[0]), ] boolean_options = ['keep-temp', 'skip-build', 'relative', 'universal'] @@ -97,6 +100,7 @@ class bdist_wheel(Command): self.group = None self.skip_scripts = False self.universal = False + self.python_tag = 'py' + get_impl_ver()[0] def finalize_options(self): if self.bdist_dir is None: @@ -129,27 +133,24 @@ class bdist_wheel(Command): def get_tag(self): supported_tags = pep425tags.get_supported() - purity = self.distribution.is_pure() - impl_ver = get_impl_ver() - abi_tag = 'none' - plat_name = 'any' - impl_name = 'py' - if purity: + if self.distribution.is_pure(): if self.universal: - impl_name = 'py2.py3' - impl_ver = '' - tag = (impl_name + impl_ver, abi_tag, plat_name) + impl = 'py2.py3' + else: + impl = self.python_tag + tag = (impl, 'none', 'any') else: plat_name = self.plat_name if plat_name is None: plat_name = get_platform() plat_name = plat_name.replace('-', '_').replace('.', '_') impl_name = get_abbr_impl() + impl_ver = get_impl_ver() # PEP 3149 -- no SOABI in Py 2 # For PyPy? # "pp%s%s" % (sys.pypy_version_info.major, # sys.pypy_version_info.minor) - abi_tag = sysconfig.get_config_vars().get('SOABI', abi_tag) + abi_tag = sysconfig.get_config_vars().get('SOABI', 'none') if abi_tag.startswith('cpython-'): abi_tag = 'cp' + abi_tag.rsplit('-', 1)[-1] diff --git a/wheel/test/test_tagopt.py b/wheel/test/test_tagopt.py new file mode 100644 index 0000000..1635857 --- /dev/null +++ b/wheel/test/test_tagopt.py @@ -0,0 +1,112 @@ +""" +Tests for the bdist_wheel --python-tag option +""" + +import os +import sys +import pytest +import py.path +import tempfile +import subprocess + +SETUP_PY = """\ +from setuptools import setup + +setup( + name="Test", + version="1.0", + author_email="author@example.com", + py_modules=["test"], +) +""" + +@pytest.fixture +def temp_pkg(request): + tempdir = tempfile.TemporaryDirectory() + def fin(): + tempdir.cleanup() + request.addfinalizer(fin) + temppath = py.path.local(tempdir.name) + temppath.join('test.py').write('print("Hello, world")') + temppath.join('setup.py').write(SETUP_PY) + return temppath + +def test_default_tag(temp_pkg): + subprocess.check_call([sys.executable, 'setup.py', 'bdist_wheel'], + cwd=str(temp_pkg)) + dist_dir = temp_pkg.join('dist') + assert dist_dir.check(dir=1) + wheels = dist_dir.listdir() + assert len(wheels) == 1 + assert wheels[0].basename.startswith('Test-1.0-py%s-' % (sys.version[0],)) + assert wheels[0].ext == '.whl' + +def test_explicit_tag(temp_pkg): + subprocess.check_call( + [sys.executable, 'setup.py', 'bdist_wheel', '--python-tag=py32'], + cwd=str(temp_pkg)) + dist_dir = temp_pkg.join('dist') + assert dist_dir.check(dir=1) + wheels = dist_dir.listdir() + assert len(wheels) == 1 + assert wheels[0].basename.startswith('Test-1.0-py32-') + assert wheels[0].ext == '.whl' + +def test_universal_tag(temp_pkg): + subprocess.check_call( + [sys.executable, 'setup.py', 'bdist_wheel', '--universal'], + cwd=str(temp_pkg)) + dist_dir = temp_pkg.join('dist') + assert dist_dir.check(dir=1) + wheels = dist_dir.listdir() + assert len(wheels) == 1 + assert wheels[0].basename.startswith('Test-1.0-py2.py3-') + assert wheels[0].ext == '.whl' + +def test_universal_beats_explicit_tag(temp_pkg): + subprocess.check_call( + [sys.executable, 'setup.py', 'bdist_wheel', '--universal', '--python-tag=py32'], + cwd=str(temp_pkg)) + dist_dir = temp_pkg.join('dist') + assert dist_dir.check(dir=1) + wheels = dist_dir.listdir() + assert len(wheels) == 1 + assert wheels[0].basename.startswith('Test-1.0-py2.py3-') + assert wheels[0].ext == '.whl' + +def test_universal_in_setup_cfg(temp_pkg): + temp_pkg.join('setup.cfg').write('[bdist_wheel]\nuniversal=1') + subprocess.check_call( + [sys.executable, 'setup.py', 'bdist_wheel'], + cwd=str(temp_pkg)) + dist_dir = temp_pkg.join('dist') + assert dist_dir.check(dir=1) + wheels = dist_dir.listdir() + assert len(wheels) == 1 + assert wheels[0].basename.startswith('Test-1.0-py2.py3-') + assert wheels[0].ext == '.whl' + +def test_pythontag_in_setup_cfg(temp_pkg): + temp_pkg.join('setup.cfg').write('[bdist_wheel]\npython_tag=py32') + subprocess.check_call( + [sys.executable, 'setup.py', 'bdist_wheel'], + cwd=str(temp_pkg)) + dist_dir = temp_pkg.join('dist') + assert dist_dir.check(dir=1) + wheels = dist_dir.listdir() + assert len(wheels) == 1 + assert wheels[0].basename.startswith('Test-1.0-py32-') + assert wheels[0].ext == '.whl' + +def test_legacy_wheel_section_in_setup_cfg(temp_pkg): + temp_pkg.join('setup.cfg').write('[wheel]\nuniversal=1') + subprocess.check_call( + [sys.executable, 'setup.py', 'bdist_wheel'], + cwd=str(temp_pkg)) + dist_dir = temp_pkg.join('dist') + assert dist_dir.check(dir=1) + wheels = dist_dir.listdir() + assert len(wheels) == 1 + assert wheels[0].basename.startswith('Test-1.0-py2.py3-') + assert wheels[0].ext == '.whl' + |