Skip to main content
Yanked

This release has been yanked by its maintainers, and will be ignored by installers, except when explicitly specified.
Consider using release 0.0.14 instead.
Reason given by maintainers: Produces Axle wheels that break on 3.9 and below.

Wheel Axle - Python Wheel enhancement library

Gitter Build Status Coverage Status

Wheel Axle Version Wheel Axle Python Versions

Wheel Axle Downloads Per Day Wheel Axle Downloads Per Week Wheel Axle Downloads Per Month

Problem

  1. Python wheel does not support symlinks.
  2. Python wheel does not support overwriting in a convenient way:
    • whether the distribution is pure-Python
    • distribution ABI tag
    • extend Python tag override capability

Solution

WARNING: THIS IS EXPERIMENTAL BETA SOFTWARE. THERE ARE NO WARRANTIES OF ANY KIND. USE AT YOUR OWN RISK. ADDITIONAL INCLUDED DISCLAIMERS ALSO APPLY.

Wheel-Axle (axle, bdist_axle) is a drop-in replacement/augmentation utility for wheel (bdist_wheel) that extends and builds spec-compliant wheels.

During the build, axle is able to capture and record in the Python wheel the symlinks in the following schema paths (locations):

  • purelib
  • platlib
  • scripts
  • headers
  • data

Additionally, Axle is able to customize the Python wheel tags via additional command line options.

While the generated Python wheel is fully spec-compliant, additional symlink functionality is not possible without its companion library Wheel Axle Runtime. Thus, every Python wheel generated by the bdist_axle automatically becomes dependent on wheel-axle-runtime that provides post-install logic required.

Implementation

The body of the library is as ugly and messy as distutils/setuptools are, and consists of, mainly, in hacking/overwriting various setuptools commands to detect, handle and record symlinks and their targets. Once that problem is solved, the list of symlinks is recorded in the .dist-info/symlinks.txt in the following CSV format:

  1. symlink name
  2. symlink target
  3. a boolean (0 or 1) flag indicating whether the target is a directory

NOTE: Symlinks may be relative, absolute and/or broken. Symlink targets are recorded verbatim (even when broken) and are NOT otherwise interpreted. THIS IS INTENTIONAL. Please see Wheel Axle Runtime Security Notice for additional information.

Two special startup files are also added to the distribution, and whichever one the running interpreter honors triggers the post-install logic via wheel-axle-runtime:

  • <distribution name and version>.pth, whose import line site executes up to Python 3.17
  • <distribution name and version>.start, a PEP 829 startup entry point file honored from Python 3.15 on, whose mere presence also suppresses the import line of the matching .pth

NOTE: wheels built by bdist_axle before 0.0.13 only carry the .pth file, and its import line relies on a site implementation detail that Python 3.15 removed. Those wheels fail to install their symlinks on Python 3.15 and have to be rebuilt with bdist_axle 0.0.13 or later. Please see the Wheel Axle Runtime compatibility notes for details.

Usage

python setup.py bdist_wheel <arguments> can be replaced with python setup.py bdist_axle <arguments>. The replacement is drop-in.

Additional functionality is available via the following options:

  --python-tag        Python implementation compatibility tag (default: 'py3')
  --root-is-pure      set to manually override whether the wheel is
                      pure (default: None)
  --abi-tag           set to override ABI tag (default: None)
  --require-libpython set to indicate the package requires libpython in the
                       exec_prefix/platlib

Using --python-tag, --root-is-pure and --abi-tag allows you to create wheels that carry platform-dependent data while otherwise containing pure-Python libraries.

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

wheel_axle-0.0.13.tar.gz (15.1 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

wheel_axle-0.0.13-py3-none-any.whl (10.0 kB view details)

Uploaded Python 3

File details

Details for the file wheel_axle-0.0.13.tar.gz.

File metadata

  • Download URL: wheel_axle-0.0.13.tar.gz
  • Upload date:
  • Size: 15.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/7.0.0 CPython/3.14.7

File hashes

Hashes for wheel_axle-0.0.13.tar.gz
Algorithm Hash digest
SHA256 0cda7e27a87cdb124f9ac54d2790288aa9e90c30374ad82e300681dc8ec71984
MD5 a42a1ce7862f06f938e4d68ac11fa312
BLAKE2b-256 f6b2919285ede64ae0af8443e28fc06a883794ded98314b335aed493b10b2e10

See more details on using hashes here.

File details

Details for the file wheel_axle-0.0.13-py3-none-any.whl.

File metadata

  • Download URL: wheel_axle-0.0.13-py3-none-any.whl
  • Upload date:
  • Size: 10.0 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/7.0.0 CPython/3.14.7

File hashes

Hashes for wheel_axle-0.0.13-py3-none-any.whl
Algorithm Hash digest
SHA256 7260c97978579fd08d4da8789403f6e16a87fc842ad2c8bc0a659186b04d5bdd
MD5 c7f233fbfe4b05a4b93ec371a20b6466
BLAKE2b-256 cff1d10f281704b46afaab2d6b4983e49c9810ad4c9836fcb0fca13eeea01b42

See more details on using hashes here.

Release history Release notifications | RSS feed

0.0.14

2 files

This release

0.0.13 This release

2 files

0.0.12

2 files

0.0.11

2 files

0.0.10

2 files

0.0.9

2 files

0.0.8

2 files

0.0.7

2 files

0.0.6

2 files

0.0.5

2 files

0.0.4

2 files

0.0.3

2 files

0.0.2

2 files

0.0.1

2 files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page