# Wheel Axle - Python Wheel enhancement library
[![Gitter](https://img.shields.io/gitter/room/karellen/Lobby?logo=gitter)](https://app.gitter.im/#/room/#karellen_Lobby:gitter.im)
[![Build Status](https://img.shields.io/github/actions/workflow/status/karellen/wheel-axle/build.yml?branch=master)](https://github.com/karellen/wheel-axle/actions/workflows/build.yml)
[![Coverage Status](https://img.shields.io/coveralls/github/karellen/wheel-axle/master?logo=coveralls)](https://coveralls.io/r/karellen/wheel-axle?branch=master)
[![Wheel Axle Version](https://img.shields.io/pypi/v/wheel-axle?logo=pypi)](https://pypi.org/project/wheel-axle/)
[![Wheel Axle Python Versions](https://img.shields.io/pypi/pyversions/wheel-axle?logo=pypi)](https://pypi.org/project/wheel-axle/)
[![Wheel Axle Downloads Per Day](https://img.shields.io/pypi/dd/wheel-axle?logo=pypi)](https://pypistats.org/packages/wheel-axle)
[![Wheel Axle Downloads Per Week](https://img.shields.io/pypi/dw/wheel-axle?logo=pypi)](https://pypistats.org/packages/wheel-axle)
[![Wheel Axle Downloads Per Month](https://img.shields.io/pypi/dm/wheel-axle?logo=pypi)](https://pypistats.org/packages/wheel-axle)
## Problem
1. `bdist_wheel` does not support symlinks.
2. `bdist_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 symlinks in the following schema paths (locations):
* purelib
* platlib
* scripts
* headers
* data
Additionally, `Axle` is able to customize the tags via additional command line options.
While the generated wheel is fully spec-compliant, additional symlinks functionality is not possible without its
companion library [Wheel Axle Runtime](https://github.com/karellen/wheel-axle-runtime). Thus, every 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](https://github.com/karellen/wheel-axle-runtime#security)
for additional information.**
A special `<distribution name and version>.pth` file is also added to the distribution. When the wheel is installed
this `.pth` file triggers the post-install logic via
[wheel-axle-runtime](https://github.com/karellen/wheel-axle-runtime).
## 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:
```commandline
--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)
```
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.
Raw data
{
"_id": null,
"home_page": "https://github.com/karellen/wheel-axle",
"name": "wheel-axle",
"maintainer": "Arcadiy Ivanov",
"docs_url": null,
"requires_python": ">=3.7",
"maintainer_email": "arcadiy@karellen.co",
"keywords": "wheel packaging setuptools bdist_wheel symlink postinstall",
"author": "Karellen, Inc.",
"author_email": "supervisor@karellen.co",
"download_url": "https://files.pythonhosted.org/packages/96/b2/e3cf7133fa1259c78e4aa518578b7f2dfc905d59dc70da1f319afdd87c5e/wheel_axle-0.0.7.tar.gz",
"platform": null,
"description": "# Wheel Axle - Python Wheel enhancement library\n\n[![Gitter](https://img.shields.io/gitter/room/karellen/Lobby?logo=gitter)](https://app.gitter.im/#/room/#karellen_Lobby:gitter.im)\n[![Build Status](https://img.shields.io/github/actions/workflow/status/karellen/wheel-axle/build.yml?branch=master)](https://github.com/karellen/wheel-axle/actions/workflows/build.yml)\n[![Coverage Status](https://img.shields.io/coveralls/github/karellen/wheel-axle/master?logo=coveralls)](https://coveralls.io/r/karellen/wheel-axle?branch=master)\n\n[![Wheel Axle Version](https://img.shields.io/pypi/v/wheel-axle?logo=pypi)](https://pypi.org/project/wheel-axle/)\n[![Wheel Axle Python Versions](https://img.shields.io/pypi/pyversions/wheel-axle?logo=pypi)](https://pypi.org/project/wheel-axle/)\n\n[![Wheel Axle Downloads Per Day](https://img.shields.io/pypi/dd/wheel-axle?logo=pypi)](https://pypistats.org/packages/wheel-axle)\n[![Wheel Axle Downloads Per Week](https://img.shields.io/pypi/dw/wheel-axle?logo=pypi)](https://pypistats.org/packages/wheel-axle)\n[![Wheel Axle Downloads Per Month](https://img.shields.io/pypi/dm/wheel-axle?logo=pypi)](https://pypistats.org/packages/wheel-axle)\n\n## Problem\n\n1. `bdist_wheel` does not support symlinks.\n2. `bdist_wheel` does not support overwriting in a convenient way:\n * whether the distribution is pure-Python\n * distribution ABI tag\n * Extend Python tag override capability\n\n## Solution\n\n**WARNING: THIS IS EXPERIMENTAL BETA SOFTWARE. THERE ARE NO WARRANTIES OF ANY KIND. USE AT YOUR OWN RISK.\nADDITIONAL INCLUDED DISCLAIMERS ALSO APPLY.**\n\nWheel-Axle (`Axle`, `bdist_axle`) is a drop-in replacement/augmentation utility for `wheel` (`bdist_wheel`)\nthat extends and builds spec-compliant wheels.\n\nDuring the build, `Axle` is able to capture and record symlinks in the following schema paths (locations):\n\n* purelib\n* platlib\n* scripts\n* headers\n* data\n\nAdditionally, `Axle` is able to customize the tags via additional command line options.\n\nWhile the generated wheel is fully spec-compliant, additional symlinks functionality is not possible without its\ncompanion library [Wheel Axle Runtime](https://github.com/karellen/wheel-axle-runtime). Thus, every wheel generated by\nthe `bdist_axle` automatically becomes dependent on `wheel-axle-runtime` that provides post-install logic required.\n\n## Implementation\n\nThe body of the library is as ugly and messy as `distutils`/`setuptools` are, and consists of, mainly, in\nhacking/overwriting various `setuptools` commands to detect, handle and record symlinks and their targets. Once that\nproblem is solved, the list of symlinks is recorded in the `.dist-info/symlinks.txt`\nin the following CSV format:\n\n1. symlink name\n2. symlink target\n3. a boolean (0 or 1) flag indicating whether the target is a directory\n\n**NOTE: Symlinks may be relative, absolute and/or broken. Symlink targets are recorded verbatim (even when broken) and\nare NOT otherwise interpreted. THIS IS INTENTIONAL. Please\nsee [Wheel Axle Runtime Security Notice](https://github.com/karellen/wheel-axle-runtime#security)\nfor additional information.**\n\nA special `<distribution name and version>.pth` file is also added to the distribution. When the wheel is installed\nthis `.pth` file triggers the post-install logic via\n[wheel-axle-runtime](https://github.com/karellen/wheel-axle-runtime).\n\n## Usage\n\n`python setup.py bdist_wheel <arguments>` can be replaced with `python setup.py bdist_axle <arguments>`. The replacement\nis drop-in.\n\nAdditional functionality is available via the following options:\n\n```commandline\n --python-tag Python implementation compatibility tag (default: 'py3')\n --root-is-pure set to manually override whether the wheel is\n pure (default: None)\n --abi-tag set to override ABI tag (default: None)\n```\n\nUsing `--python-tag`, `--root-is-pure` and `--abi-tag` allows you to create wheels that carry platform-dependent data\nwhile otherwise containing pure-Python libraries.\n",
"bugtrack_url": null,
"license": "Apache License, Version 2.0",
"summary": "Axle is Python wheel enhancement library",
"version": "0.0.7",
"project_urls": {
"Bug Tracker": "https://github.com/karellen/wheel-axle/issues",
"Documentation": "https://github.com/karellen/wheel-axle/",
"Homepage": "https://github.com/karellen/wheel-axle",
"Source Code": "https://github.com/karellen/wheel-axle/"
},
"split_keywords": [
"wheel",
"packaging",
"setuptools",
"bdist_wheel",
"symlink",
"postinstall"
],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "062cfc7472f2e23a807a03ec46a5edde49b311b18f968d9998276079eec47df9",
"md5": "4feb70a70e331ca1da9a288f753985d3",
"sha256": "24899b8f64103059f44ec7f76bb3642d1003f40a430cf20b71b2573989b50773"
},
"downloads": -1,
"filename": "wheel_axle-0.0.7-py3-none-any.whl",
"has_sig": false,
"md5_digest": "4feb70a70e331ca1da9a288f753985d3",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.7",
"size": 9041,
"upload_time": "2023-07-10T06:45:33",
"upload_time_iso_8601": "2023-07-10T06:45:33.524279Z",
"url": "https://files.pythonhosted.org/packages/06/2c/fc7472f2e23a807a03ec46a5edde49b311b18f968d9998276079eec47df9/wheel_axle-0.0.7-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "96b2e3cf7133fa1259c78e4aa518578b7f2dfc905d59dc70da1f319afdd87c5e",
"md5": "9fced2e2be77fe68aae1fd746d6a4efe",
"sha256": "a6b3aea1ca0a852445538786fe765977d567d98134afcdbc894438a21cc8dfb0"
},
"downloads": -1,
"filename": "wheel_axle-0.0.7.tar.gz",
"has_sig": false,
"md5_digest": "9fced2e2be77fe68aae1fd746d6a4efe",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.7",
"size": 13742,
"upload_time": "2023-07-10T06:45:34",
"upload_time_iso_8601": "2023-07-10T06:45:34.805265Z",
"url": "https://files.pythonhosted.org/packages/96/b2/e3cf7133fa1259c78e4aa518578b7f2dfc905d59dc70da1f319afdd87c5e/wheel_axle-0.0.7.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2023-07-10 06:45:34",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "karellen",
"github_project": "wheel-axle",
"travis_ci": false,
"coveralls": false,
"github_actions": true,
"lcname": "wheel-axle"
}