Skip to main content

Tools for working with curated collections of Cargo packages

Project description

build pypi

Tools for working with curated collections of Cargo packages

pallet-patcher is a command-line tool designed to compose a collection of locally available Cargo packages that satisfy the dependencies of a given Cargo manifest. It resolves dependencies from provided local search paths, identifying compatible crate versions, and outputs patch arguments or configuration that can be supplied directly to Cargo. This is particularly useful for building Cargo projects in offline environments or working with specific layers of dependencies.

Motivation

Cargo is designed to be highly reliable by ensuring that dependencies are either pulled from a central registry (like crates.io) or explicitly defined by their location (e.g., path = "../my-crate"). While this approach provides great predictability, there are specialized use cases where developers may need more flexibility—specifically, when resolving dependencies from dynamically provided local directories without modifying the original source code.

Other build systems and environments often provide mechanisms to search for dependencies across multiple locations:

  • CMake utilizes CMAKE_PREFIX_PATH for package discovery.

  • pkg-config leverages PKG_CONFIG_PATH to locate libraries.

  • Python uses PYTHONPATH to find modules.

pallet-patcher provides a similar workflow for the Cargo ecosystem. It is particularly useful for complex development environments where projects are composed from multiple independent local layers or for building in restricted, offline environments where dependency sources are managed externally.

By scanning a list of search paths and resolving compatible crate versions using standard SemVer rules, pallet-patcher dynamically generates the necessary Cargo configuration to patch dependencies with their discovered local counterparts. This provides a bridge between Cargo’s strict dependency management and the need for dynamic, path-based discovery in specific workflows.

Usage

usage: pallet-patcher [-h] [--output-format {args,toml}]
                      manifest_path search_path [search_path ...]

positional arguments:
  manifest_path         Path to the Cargo.toml file on disk
  search_path           List of local registry sources to search for packages

options:
  -h, --help            show this help message and exit
  --output-format {args,toml}
                        Choose the output format for Cargo configuration. 'args' (default)
                        for CLI arguments, or 'toml' for configuration file contents.

Example

Generate Cargo command-line arguments to patch dependencies using locally available crates:

pallet-patcher Cargo.toml /usr/share/cargo/registry ../another/path

Output:

--config=patch.'crates-io'.'pkg::0.1.0'.package='pkg'
--config=patch.'crates-io'.'pkg::0.1.0'.path='/path/to/local/crates/pkg'

Generate a TOML configuration for your .cargo/config.toml:

pallet-patcher --output-format toml Cargo.toml /usr/share/cargo/registry > .cargo/config.toml

Output:

[patch.'crates-io'.'pkg::0.1.0']
package = 'pkg'
path = '/usr/share/cargo/registry/pkg'

Project details


Download files

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

Source Distribution

pallet_patcher-0.2.0.tar.gz (20.1 kB view details)

Uploaded Source

Built Distribution

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

pallet_patcher-0.2.0-py3-none-any.whl (14.7 kB view details)

Uploaded Python 3

File details

Details for the file pallet_patcher-0.2.0.tar.gz.

File metadata

  • Download URL: pallet_patcher-0.2.0.tar.gz
  • Upload date:
  • Size: 20.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.1.1 pkginfo/1.4.2 requests/2.22.0 setuptools/59.8.0 requests-toolbelt/0.8.0 tqdm/4.30.0 CPython/3.8.10

File hashes

Hashes for pallet_patcher-0.2.0.tar.gz
Algorithm Hash digest
SHA256 399052e44647d32eb609a90dc4c270a645f335cb5c5873433354ee7907280f7f
MD5 76394d63939bfc73701b7349379f5676
BLAKE2b-256 d3db7a1c936c2a70968223ef27dbaca5f1024c8085292c56e2587a017152b4e0

See more details on using hashes here.

File details

Details for the file pallet_patcher-0.2.0-py3-none-any.whl.

File metadata

  • Download URL: pallet_patcher-0.2.0-py3-none-any.whl
  • Upload date:
  • Size: 14.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.1.1 pkginfo/1.4.2 requests/2.22.0 setuptools/59.8.0 requests-toolbelt/0.8.0 tqdm/4.30.0 CPython/3.8.10

File hashes

Hashes for pallet_patcher-0.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 7df88789ebf07a1ffe87d6332afa187481c4e1cfcf78f90e5deb83032b1696d7
MD5 a8d2d0e4f3d2d88587baf7270e6506ce
BLAKE2b-256 f8606e193c47a5c2d65f5b3a736db57222ab770649dccb5c81167e313f97ed6a

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page