wheel-axle


Namewheel-axle JSON
Version 0.0.9 PyPI version JSON
download
home_pagehttps://github.com/karellen/wheel-axle
SummaryAxle is Python wheel enhancement library
upload_time2024-09-20 03:30:59
maintainerArcadiy Ivanov
docs_urlNone
authorKarellen, Inc.
requires_python>=3.7
licenseApache License, Version 2.0
keywords wheel packaging setuptools bdist_wheel symlink postinstall
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # 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. 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](https://github.com/karellen/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](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)
  --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.

            

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/be/dd/3fb6f6b9a1e89de68c569dd37d9a6d9f9bf4bec77eeed4b35f94cb9e61c6/wheel_axle-0.0.9.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. Python wheel does not support symlinks.\n2. Python 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 in the Python wheel the symlinks in the following\nschema paths (locations):\n\n* purelib\n* platlib\n* scripts\n* headers\n* data\n\nAdditionally, `Axle` is able to customize the Python wheel tags via additional command line options.\n\nWhile the generated Python wheel is fully spec-compliant, additional symlink functionality is not possible without its\ncompanion library [Wheel Axle Runtime](https://github.com/karellen/wheel-axle-runtime). Thus, every Python wheel\ngenerated by the `bdist_axle` automatically becomes dependent on `wheel-axle-runtime` that provides\npost-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  --require-libpython set to indicate the package requires libpython in the\n                       exec_prefix/platlib\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.9",
    "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": "f0a0942868dac6c7a121dc109b9e5a26447c2f016a3b184f4f8c034e4cc706f9",
                "md5": "dcef9ae8ad26dbd2a09ceecf64b1b259",
                "sha256": "92a3757edbf5f6ceb490c66e0ab47e37492d276bcb8eef6d2912a2afe6e46871"
            },
            "downloads": -1,
            "filename": "wheel_axle-0.0.9-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "dcef9ae8ad26dbd2a09ceecf64b1b259",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.7",
            "size": 9344,
            "upload_time": "2024-09-20T03:30:58",
            "upload_time_iso_8601": "2024-09-20T03:30:58.456678Z",
            "url": "https://files.pythonhosted.org/packages/f0/a0/942868dac6c7a121dc109b9e5a26447c2f016a3b184f4f8c034e4cc706f9/wheel_axle-0.0.9-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "bedd3fb6f6b9a1e89de68c569dd37d9a6d9f9bf4bec77eeed4b35f94cb9e61c6",
                "md5": "aea9c9b06f4378003e4fb14843a9984b",
                "sha256": "d82ee31353cd740c8e5faaf44f3bf9e90fef5091e3436c4b21e9ab2176019def"
            },
            "downloads": -1,
            "filename": "wheel_axle-0.0.9.tar.gz",
            "has_sig": false,
            "md5_digest": "aea9c9b06f4378003e4fb14843a9984b",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.7",
            "size": 14088,
            "upload_time": "2024-09-20T03:30:59",
            "upload_time_iso_8601": "2024-09-20T03:30:59.820634Z",
            "url": "https://files.pythonhosted.org/packages/be/dd/3fb6f6b9a1e89de68c569dd37d9a6d9f9bf4bec77eeed4b35f94cb9e61c6/wheel_axle-0.0.9.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2024-09-20 03:30:59",
    "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"
}
        
Elapsed time: 1.13139s