Changelogs » Wheel

PyUp Safety actively tracks 362,670 Python packages for vulnerabilities and notifies you when to upgrade.



- Added official Python 3.10 support
  - Updated vendored ``packaging`` library to v20.9


- Updated vendored ``packaging`` library to v20.8
  - Fixed wheel sdist missing ``LICENSE.txt``
  - Don't use default ``macos/arm64`` deployment target in calculating the
  platform tag for fat binaries (PR by Ronald Oussoren)


- Fixed ``AssertionError`` when ``MACOSX_DEPLOYMENT_TARGET`` was set to ``11``
  (PR by Grzegorz Bokota and François-Xavier Coudert)
  - Fixed regression introduced in 0.36.0 on Python 2.7 when a custom generator
  name was passed as unicode (Scikit-build)
  (``TypeError: 'unicode' does not have the buffer interface``)


- Added official Python 3.9 support
  - Updated vendored ``packaging`` library to v20.7
  - Switched to always using LF as line separator when generating ``WHEEL`` files
  (on Windows, CRLF was being used instead)
  - The ABI tag is taken from  the sysconfig SOABI value. On PyPy the SOABI value
  is ``pypy37-pp73`` which is not compliant with PEP 3149, as it should have
  both the API tag and the platform tag. This change future-proofs any change
  in PyPy's SOABI tag to make sure only the ABI tag is used by wheel.
  - Fixed regression and test for ``bdist_wheel --plat-name``. It was ignored for
  C extensions in v0.35, but the regression was not detected by tests.


- Replaced install dependency on ``packaging`` with a vendored copy of its
  ``tags`` module
  - Fixed ``bdist_wheel`` not working on FreeBSD due to mismatching platform tag
  name (it was not being converted to lowercase)


- Switched to the packaging_ library for computing wheel tags
  - Fixed a resource leak in ```` (PR by Jon Dufresne)
  .. _packaging:


- Fixed installation of ``wheel`` from sdist on environments without Unicode
  file name support


- Fixed installation of ``wheel`` from sdist which was broken due to a chicken
  and egg problem with PEP 517 and setuptools_scm


- Dropped Python 3.4 support
  - Added automatic platform tag detection for macOS binary wheels
  (PR by Grzegorz Bokota)
  - Added the ``--compression=`` option to the ``bdist_wheel`` command
  - Fixed PyPy tag generation to work with the updated semantics (328)
  - Updated project packaging and testing configuration for :pep:`517`
  - Moved the contents of to setup.cfg
  - Fixed duplicate RECORD file when using ``wheel pack`` on Windows
  - Fixed bdist_wheel failing at cleanup on Windows with a read-only source tree
  - Fixed ``wheel pack`` not respecting the existing build tag in ``WHEEL``
  - Switched the project to use the "src" layout
  - Switched to setuptools_scm_ for versioning
  .. _setuptools_scm:


- Fixed regression from 0.33.5 that broke building binary wheels against the
  limited ABI
  - Fixed egg2wheel compatibility with the future release of Python 3.10
  (PR by Anthony Sottile)


- Don't add the ``m`` ABI flag to wheel names on Python 3.8 (PR by rdb)
  - Updated ```` to include many previously omitted files in the sdist


- Reverted PR 289 (adding directory entries to the wheel file) due to
  incompatibility with ``distlib.wheel``


- Fixed wheel build failures on some systems due to all attributes being
  preserved (PR by Matt Wozniski)


- Fixed empty directories missing from the wheel (PR by Jason R. Coombs)


- Fixed the ``--build-number`` option for ``wheel pack`` not being applied


- Added the ``--build-number`` option to the ``wheel pack`` command
  - Fixed bad shebangs sneaking into wheels
  - Fixed documentation issue with ``wheel pack`` erroneously being called
  ``wheel repack``
  - Fixed filenames with "bad" characters (like commas) not being quoted in
  ``RECORD`` (PR by Paul Moore)
  - Sort requirements extras to ensure deterministic builds
  (PR by PoncinMatthieu)
  - Forced ``inplace = False`` when building a C extension for the wheel


- Fixed compatibility with Python 2.7.0 – 2.7.3
  - Fixed handling of direct URL requirements with markers (PR by Benoit Pierre)


- Fixed build number appearing in the ``.dist-info`` directory name
  - Made wheel file name parsing more permissive
  - Fixed wrong Python tag in wheels converted from eggs
  (PR by John T. Wodder II)


- Fixed ``AttributeError: 'Requirement' object has no attribute 'url'`` on
  setuptools/pkg_resources versions older than 18.8 (PR by Benoit Pierre)
  - Fixed ``AttributeError: 'module' object has no attribute
  'algorithms_available'`` on Python < 2.7.9 (PR by Benoit Pierre)
  - Fixed permissions on the generated ``.dist-info/RECORD`` file


- Removed wheel signing and verifying features
  - Removed the "wheel install" and "wheel installscripts" commands
  - Added the ``wheel pack`` command
  - Allowed multiple license files to be specified using the ``license_files``
  - Deprecated the ``license_file`` option
  - Eliminated duplicate lines from generated requirements in
  ``.dist-info/METADATA`` (thanks to Wim Glenn for the contribution)
  - Fixed handling of direct URL specifiers in requirements
  (PR by Benoit Pierre)
  - Fixed canonicalization of extras (PR by Benoit Pierre)
  - Warn when the deprecated ``[wheel]`` section is used in ``setup.cfg``
  (PR by Jon Dufresne)


- Fixed arch as ``None`` when converting eggs to wheels


- Fixed displaying of errors on Python 3
  - Fixed single digit versions in wheel files not being properly recognized
  - Fixed wrong character encodings being used (instead of UTF-8) to read and
  write ``RECORD`` (this sometimes crashed bdist_wheel too)
  - Enabled Zip64 support in wheels by default
  - Metadata-Version is now 2.1
  - Dropped DESCRIPTION.rst and metadata.json from the list of generated files
  - Dropped support for the non-standard, undocumented ``provides-extra`` and
  ``requires-dist`` keywords in setup.cfg metadata
  - Deprecated all wheel signing and signature verification commands
  - Removed the (already defunct) ``tool`` extras from


- Added py-limited-api {cp32|cp33|cp34|...} flag to produce cpNN.abi3.{arch}
  tags on CPython 3.
  - Documented the ``license_file`` metadata key
  - Improved Python, abi tagging for ``wheel convert``. Thanks Ales Erjavec.
  - Fixed ``>`` being prepended to lines starting with "From" in the long
  - Added support for specifying a build number (as per PEP 427).
  Thanks Ian Cordasco.
  - Made the order of files in generated ZIP files deterministic.
  Thanks Matthias Bach.
  - Made the order of requirements in metadata deterministic. Thanks Chris Lamb.
  - Fixed ``wheel install`` clobbering existing files
  - Improved the error message when trying to verify an unsigned wheel file
  - Removed support for Python 2.6, 3.2 and 3.3.


- Fix compression type of files in archive (Issue 155, Pull Request 62,
  thanks Xavier Fernandez)


- Fix file modes in archive (Issue 154)


- Support forcing a platform tag using ``--plat-name`` on pure-Python wheels,
  as well as nonstandard platform tags on non-pure wheels (Pull Request 60,
  Issue 144, thanks Andrés Díaz)
  - Add SOABI tags to platform-specific wheels built for Python 2.X (Pull Request
  55, Issue 63, Issue 101)
  - Support reproducible wheel files, wheels that can be rebuilt and will hash to
  the same values as previous builds (Pull Request 52, Issue 143, thanks
  Barry Warsaw)
  - Support for changes in keyring >= 8.0 (Pull Request 61, thanks Jason R.
  - Use the file context manager when checking if dependency_links.txt is empty,
  fixes problems building wheels under PyPy on Windows  (Issue 150, thanks
  Cosimo Lupo)
  - Don't attempt to (recursively) create a build directory ending with ``..``
  (invalid on all platforms, but code was only executed on Windows) (Issue 91)
  - Added the PyPA Code of Conduct (Pull Request 56)


- Fix multiple entrypoint comparison failure on Python 3 (Issue 148)


- Add Python 3.5 to tox configuration
  - Deterministic (sorted) metadata
  - Fix tagging for Python 3.5 compatibility
  - Support py2-none-'arch' and py3-none-'arch' tags
  - Treat data-only wheels as pure
  - Write to temporary file and rename when using wheel install --force


- The python tag used for pure-python packages is now .pyN (major version
  only). This change actually occurred in 0.23.0 when the --python-tag
  option was added, but was not explicitly mentioned in the changelog then.
  - wininst2wheel and egg2wheel removed. Use "wheel convert [archive]"
  - Wheel now supports setuptools style conditional requirements via the
  extras_require={} syntax. Separate 'extra' names from conditions using
  the : character. Wheel's own does this. (The empty-string
  extra is the same as install_requires.) These conditional requirements
  should work the same whether the package is installed by wheel or


- Compatibility tag flags added to the bdist_wheel command
  - sdist should include files necessary for tests
  - 'wheel convert' can now also convert unpacked eggs to wheel
  - Rename pydist.json to metadata.json to avoid stepping on the PEP
  - The --skip-scripts option has been removed, and not generating scripts is now
  the default. The option was a temporary approach until installers could
  generate scripts themselves. That is now the case with pip 1.5 and later.
  Note that using pip 1.4 to install a wheel without scripts will leave the
  installation without entry-point wrappers. The "wheel install-scripts"
  command can be used to generate the scripts in such cases.
  - Thank you contributors


- Include entry_points.txt, scripts a.k.a. commands, in experimental
  - Improved test_requires parsing
  - Python 2.6 fixes, "wheel version" command courtesy pombredanne


- Pregenerated scripts are the default again.
  - " bdist_wheel --skip-scripts" turns them off.
  - setuptools is no longer a listed requirement for the 'wheel'
  package. It is of course still required in order for bdist_wheel
  to work.
  - "python -m wheel" avoids importing pkg_resources until it's necessary.


- No longer include console_scripts in wheels. Ordinary scripts (shell files,
  standalone Python files) are included as usual.
  - Include new command "python -m wheel install-scripts [distribution
  [distribution ...]]" to install the console_scripts (setuptools-style
  scripts using pkg_resources) for a distribution.


- pymeta.json becomes pydist.json


- Python 3 Unicode improvements


- Support latest PEP-426 "pymeta.json" (json-format metadata)


- Python 2.6 compatibility bugfix (thanks John McFarlane)
  - Bugfix for C-extension tags for CPython 3.3 (using SOABI)
  - Bugfix for bdist_wininst converter "wheel convert"
  - Bugfix for dists where "is pure" is None instead of True or False
  - Python 3 fix for moving Unicode Description to metadata body
  - Include rudimentary API documentation in Sphinx (thanks Kevin Horn)


- Various improvements


- Changed the signature format to better comply with the current JWS spec.
  Breaks all existing signatures.
  - Include ``wheel unsign`` command to remove RECORD.jws from an archive.
  - Put the description in the newly allowed payload section of PKG-INFO
  (METADATA) files.


- Use distutils instead of sysconfig to get installation paths; can install
  - Improve WheelFile() sort.
  - Allow bootstrap installs without any pkg_resources.


- Unit test for wheel.tool.install


- API cleanup


- Scripts fixer fix


- Fix keygen


- Preserve attributes on install.


- Include a copy of pkg_resources. Wheel can now install into a virtualenv
  that does not have distribute (though most packages still require
  pkg_resources to actually work; wheel install distribute)
  - Define a new setup.cfg section [wheel]. universal=1 will
  apply the py2.py3-none-any tag for pure python wheels.


- Only import dirspec when needed. dirspec is only needed to find the
  configuration for keygen/signing operations.


- requires-dist from setup.cfg overwrites any requirements from
  Care must be taken that the requirements are the same in both cases,
  or just always install from wheel.
  - drop dirspec requirement on win32
  - improved command line utility, adds 'wheel convert [egg or wininst]' to
  convert legacy binary formats to wheel


- Wheel's own wheel file can be executed by Python, and can install itself:
  ``python wheel-0.9.5-py27-none-any/wheel install ...``
  - Use argparse; basic ``wheel install`` command should run with only stdlib
  - Allow requires_dist in setup.cfg's [metadata] section. In addition to
  dependencies in, but will only be interpreted when installing
  from wheel, not from sdist. Can be qualified with environment markers.


- Fix wheel.signatures in sdist


- Integrated digital signatures support without C extensions.
  - Integrated "wheel install" command (single package, no dependency
  resolution) including compatibility check.
  - Support Python 3.3
  - Use Metadata 1.3 (PEP 426)


- Automatic signing if WHEEL_TOOL points to the wheel binary
  - Even more Python 3 fixes


- 'wheel sign' uses the keys generated by 'wheel keygen' (instead of generating
  a new key at random each time)
  - Python 2/3 encoding/decoding fixes
  - Run tests on Python 2.6 (without signature verification)


- Updated digital signatures scheme
  - Python 3 support for digital signatures
  - Always verify RECORD hashes on extract
  - "wheel" command line tool to sign, verify, unpack wheel files


- none/any draft pep tags update
  - improved wininst2wheel script
  - doc changes and other improvements


- sort .dist-info at end of wheel archive
  - Windows & Python 3 fixes from Paul Moore
  - pep8
  - scripts to convert wininst & egg to wheel


- require distribute >= 0.6.28
  - stop using verlib


- working pretty well


- hyphenated name fix


- improve test coverage
  - improve Windows compatibility
  - include tox.ini courtesy of Marc Abramowitz
  - draft hmac sha-256 signing function


- prototype egg2wheel conversion script


- Python 3 compatibility


- Initial version