uv/crates
Zanie Blue 5f1f207628
Recursively merge existing package directories on installation (#516)
Previously, when installing a package we would delete the target
directory before copying (or linking) the contents of the package.
However, this means that we do not properly support namespace packages
which can share a target directory. Instead the last package to be
installed would be override existing packages. Since we install packages
in parallel, this could result in a race condition where the target
directory already exists which is not allowed when using `clonefile`.
See example error in #515.
c7e63d2dce
provides a regression test for this — it fails on `main`.

Here, we implement a recursive merge when the target directory already
exists. Both packages will be installed into the same directory. We no
longer delete the target directory, which seems okay since we uninstall
packages before installing now.

When files conflict, we will likely throw an error still. The correct
behavior to implement in this case is unclear, as if we just take "first
write wins" or "last write wins" we could end up with some files from
one package and some from another resulting in two broken packages. A
possible solution here is to lock the target directories while copying.
2023-11-30 10:14:51 -06:00
..
bench Use Clippy lint table over Cargo config (#490) 2023-11-22 15:10:27 +00:00
distribution-filename Use Clippy lint table over Cargo config (#490) 2023-11-22 15:10:27 +00:00
distribution-types Check compatibility for cached unzipped wheels (#501) 2023-11-27 16:03:58 -08:00
gourgeist Migrate interpreter query to custom caching (#508) 2023-11-28 17:14:59 +00:00
install-wheel-rs Recursively merge existing package directories on installation (#516) 2023-11-30 10:14:51 -06:00
pep440-rs Consistent Cargo.toml syntax (#483) 2023-11-22 08:34:08 +00:00
pep508-rs Consistent Cargo.toml syntax (#483) 2023-11-22 08:34:08 +00:00
platform-host Error when ldd is not in path (#506) 2023-11-28 05:55:04 +00:00
platform-tags Add Tags::from_interpreter (#498) 2023-11-24 11:36:01 +00:00
puffin-build Better tracing span (#513) 2023-11-29 10:34:18 +00:00
puffin-cache Migrate interpreter query to custom caching (#508) 2023-11-28 17:14:59 +00:00
puffin-cli Recursively merge existing package directories on installation (#516) 2023-11-30 10:14:51 -06:00
puffin-client Migrate interpreter query to custom caching (#508) 2023-11-28 17:14:59 +00:00
puffin-dev Skip tf-models-nightly in resolve-many dev script for now (#510) 2023-11-28 18:25:32 +00:00
puffin-dispatch Better tracing span (#513) 2023-11-29 10:34:18 +00:00
puffin-distribution Better tracing span (#513) 2023-11-29 10:34:18 +00:00
puffin-git Better tracing span (#513) 2023-11-29 10:34:18 +00:00
puffin-installer Introduce Cache, CacheBucket and CacheEntry (#507) 2023-11-28 17:11:14 +00:00
puffin-interpreter Migrate interpreter query to custom caching (#508) 2023-11-28 17:14:59 +00:00
puffin-macros Use Clippy lint table over Cargo config (#490) 2023-11-22 15:10:27 +00:00
puffin-normalize Split puffin-package into requirements.txt parser and pypi-types (#341) 2023-11-06 18:19:49 +00:00
puffin-resolver Migrate interpreter query to custom caching (#508) 2023-11-28 17:14:59 +00:00
puffin-traits Introduce Cache, CacheBucket and CacheEntry (#507) 2023-11-28 17:11:14 +00:00
puffin-workspace Use Clippy lint table over Cargo config (#490) 2023-11-22 15:10:27 +00:00
pypi-types Use Clippy lint table over Cargo config (#490) 2023-11-22 15:10:27 +00:00
requirements-txt Use Clippy lint table over Cargo config (#490) 2023-11-22 15:10:27 +00:00
README.md Unify distribution operations into a single crate (#460) 2023-11-20 11:22:52 +00:00

Crates

bench

Functionality for benchmarking Puffin.

distribution-filename

Parse built distribution (wheel) and source distribution (sdist) filenames to extract structured metadata.

distribution-types

Abstractions for representing built distributions (wheels) and source distributions (sdists), and the sources from which they can be downloaded.

gourgeist

A venv replacement to create virtual environments in Rust.

install-wheel-rs

Install built distributions (wheels) into a virtual environment.]

pep440-rs

Utilities for interacting with Python version numbers and specifiers.

pep508-rs

Utilities for interacting with PEP 508 dependency specifiers.

platform-host

Functionality for detecting the current platform (operating system, architecture, etc.).

platform-tags

Functionality for parsing and inferring Python platform tags as per PEP 425.

puffin-build

A PEP 517-compatible build frontend for Puffin.

puffin-cache

Functionality for caching Python packages and associated metadata.

puffin-cli

Command-line interface for the Puffin package manager.

puffin-client

Client for interacting with PyPI-compatible HTTP APIs.

puffin-dev

Development utilities for Puffin.

puffin-dispatch

A centralized struct for resolving and building source distributions in isolated environments. Implements the traits defined in puffin-traits.

puffin-distribution

Client for interacting with built distributions (wheels) and source distributions (sdists). Capable of fetching metadata, distribution contents, etc.

puffin-git

Functionality for interacting with Git repositories.

puffin-installer

Functionality for installing Python packages into a virtual environment.

puffin-interpreter

Functionality for detecting and leveraging the current Python interpreter.

puffin-macros

Reusable procedural macros for Puffin.

puffin-normalize

Normalize package and extra names as per Python specifications.

puffin-package

Types and functionality for working with Python packages, e.g., parsing wheel files.

puffin-resolver

Functionality for resolving Python packages and their dependencies.

puffin-traits

Shared traits for Puffin, to avoid circular dependencies.

pypi-types

General-purpose type definitions for types used in PyPI-compatible APIs.

requirements-txt

Functionality for parsing requirements.txt files.