Skip to main content

Shared global environment package installer using symlinks โ€” like pnpm for Python

Project description

Agent Action Guard

๐Ÿ pepip

uv and pip, but shared. Install packages once. Use them everywhere.

pepip is the pnpm of Python โ€” a drop-in alternative to pip / uv that stores each resolved package version once in a shared store and wires your project .venv to it via symlinks. No more downloading torch and transformers five times across experiments. It internally uses uv for package resolution and venv management, so you get the uv command surface and compatibility, but with a fraction of the disk usage and faster installs for subsequent projects.

Built for package-heavy Python workflows, pepip is especially useful for AI/ML projects that repeatedly create envs for model prototyping, training, and inference.

PyPI PyPI Downloads Website

Python AI License: MIT


๐Ÿค” The Problem

Every Python project gets its own virtual environment. That means every project downloads and stores its own copy of every dependency โ€” including the big ones.

project-a/.venv/  โ†’  numpy 1.0 (34 MB)  torch 2.4 (2.2 GB)
project-b/.venv/  โ†’  numpy 2.0 (35 MB)  torch 2.4 (2.2 GB)
project-c/.venv/  โ†’  numpy 2.0 (35 MB)  torch 2.5 (2.3 GB)
                                         โ†‘ stored 3ร— for no reason

โœ… The Solution

pepip keeps an immutable shared package-version store and symlinks each project's .venv back to the exact versions it resolved. Same Python import behaviour. A fraction of the disk usage.

~/.pepip/packages/  โ†’  numpy 1.9 (34 MB) numpy 2.0 (35 MB) torch 2.4 (2.2 GB)
                        torch 2.5 (2.3 GB)  โ† stored once per version

project-a/.venv/  โ†’  numpy 1.0 (symlink)  torch 2.4 (symlink) โ†’ ~bytes
project-b/.venv/  โ†’  numpy 2.0 (symlink)  torch 2.4 (symlink) โ†’ ~bytes
project-c/.venv/  โ†’  numpy 2.0 (symlink)  torch 2.5 (symlink) โ†’ ~bytes

๐Ÿ” Comparison

Feature uv / pip conda pepip
Shared package store โŒ โœ… โœ…
Disk usage (multi-project) ๐Ÿ”ด ๐ŸŸข ๐ŸŸข
Install speed (repeat packages) ๐ŸŸก ๐ŸŸก ๐ŸŸข
Virtual env compatibility โœ… โŒ โœ…
Multiple versions for each env โœ… โŒ โœ…
Installation size ๐ŸŸข ๐Ÿ”ด ๐ŸŸข

Key differences:

  • Speed and download size: While uv and conda cache helps, they still copy packages. If cache is cleared, they redownload. pepip only downloads once per version, then symlinks for every project, allowing instant installs for subsequent projects.

As pepip is based on uv, it has same advantages as uv, without the repeated download and storage cost.


๐Ÿš€ Installation

pip install pepip

or using uv:

uvx pepip

Requirements: Python 3.8+ ยท uv (auto-installed) ยท Linux / macOS / Windows

On Windows, creating symlinks typically requires Developer Mode or an elevated shell. pepip now raises a clear error if the OS blocks symlink creation.

Platform compatibility

Windows macOS Linux

  • pepip supports Linux, macOS, and Windows.
  • Shared-store reuse works across projects on the same machine/OS, while each OS keeps its own compatible store layout.

๐Ÿ“ฆ Usage

Install packages using pepip

# Install one or more packages
pepip install numpy pandas

# AI/ML stack example
pepip install torch transformers accelerate datasets

# Install from a requirements file
pepip install -r requirements.txt

# Use a custom local venv path (default: .venv)
pepip install numpy --venv /path/to/my-env

Use pepip as a uv replacement

Every pepip command except install is forwarded to uv unchanged. That means you can keep using the rest of the uv workflow through pepip:

pepip sync --all
pepip run python -m pytest
pepip venv .venv --python 3.12
pepip pip install ".[all]"
pepip --version

pepip install ... remains the shared-store install path, while the rest of the CLI behaves like uv.

or

uvx pepip install numpy pandas

Then activate and use your .venv exactly as you normally would:

# macOS / Linux
source .venv/bin/activate
python -c "import numpy; print(numpy.__version__)"
# Windows PowerShell
.venv\Scripts\Activate.ps1
python -c "import numpy; print(numpy.__version__)"

pepip is compatible with existing uv environments. If a target venv already exists (for example created with uv venv), pepip install --venv <path> reuses it and links packages into that environment.

Usage using "uv"

uvx pepip install numpy pandas

This can be executed without installing pepip or creating a virtual environment, as long as uv is installed.

Override the global store location

PEPIP_HOME=/shared/team-env pepip install torch

This is handy for sharing a global store across a whole team on a shared machine.


๐Ÿ—‚ How it works

~/.pepip/
โ”œโ”€โ”€ global-venv/                         โ† build interpreter for uv installs
โ””โ”€โ”€ packages/
    โ””โ”€โ”€ cpython-312-linux-x86_64/
        โ”œโ”€โ”€ numpy-1.0/
        โ”‚   โ”œโ”€โ”€ numpy/                   โ† real files, stored once
        โ”‚   โ””โ”€โ”€ numpy-1.0.dist-info/
        โ”œโ”€โ”€ numpy-2.0/
        โ”‚   โ”œโ”€โ”€ numpy/                   โ† real files, stored once
        โ”‚   โ””โ”€โ”€ numpy-2.0.dist-info/
        โ”œโ”€โ”€ torch-2.4/
        โ”‚   โ”œโ”€โ”€ torch/                   โ† real files, stored once
        โ”‚   โ””โ”€โ”€ torch-2.4.dist-info/
        โ””โ”€โ”€ torch-2.5/
            โ”œโ”€โ”€ torch/                   โ† real files, stored once
            โ””โ”€โ”€ torch-2.5.dist-info/

my-project-1/
โ””โ”€ .venv/
    โ””โ”€ lib/
       โ””โ”€ python3.12/
          โ””โ”€ site-packages/
             โ”œโ”€ numpy  โ”€โ”€โ”€โ†’  ~/.pepip/packages/.../numpy-2.0/numpy   (symlink, ~bytes)
             โ””โ”€ pandas โ”€โ”€โ”€โ†’  ~/.pepip/packages/.../pandas-2.2/pandas (symlink, ~bytes)
my-project-2/
โ””โ”€ .venv/
    โ””โ”€ lib/
       โ””โ”€ python3.12/
          โ””โ”€ site-packages/
             โ”œโ”€ torch  โ”€โ”€โ”€โ†’  ~/.pepip/packages/.../torch-2.4/torch   (symlink, ~bytes)
             โ””โ”€ numpy  โ”€โ”€โ”€โ†’  ~/.pepip/packages/.../numpy-1.0/numpy   (symlink, ~bytes)
  • First install of a package version โ€” downloads once into the shared store, then symlinks.
  • Every subsequent project using the same package version โ€” symlinks only. Near-instant, zero extra disk.
  • Different projects can use different versions โ€” for example, one project can link to numpy==1.0 while another links to numpy==2.0. Each version is stored once, and projects link to the version they resolved.

๐Ÿ“Š Benchmarks

The eval/benchmark.py script measures installation latency and disk usage across N projects compared to a plain uv workflow.

# 5 projects, mixed real-world packages
python eval/benchmark.py --projects 5 --packages tomli packaging requests numpy pandas

# Keep temp directories for manual inspection
python eval/benchmark.py --no-cleanup

Latest results โ€” 5 projects ยท tomli packaging requests numpy pandas

Metric uv (baseline) pepip Improvement
โฑ Latency 0.56 s 0.33 s โ˜… 0.23s
๐Ÿ’พ Disk usage 475.19 MB 95.22 MB 379.97 MB

Why the savings get better over time

  • Storage savings are consistent from project one: each package version lives exactly once in the global store, so local .venv directories contain only tiny symlinks (dozens of bytes each) instead of full copies.
  • Latency savings grow with project count: the first project pays the same download cost as plain uv. Every additional project only needs venv creation + symlink creation, which is nearly instant. For large packages like torch or transformers (GBs in size), these savings per extra project are proportionally enormous.
  • Best fit for AI iteration loops: if you spin up multiple repos for finetuning runs, eval pipelines, or inference services, pepip avoids repeatedly materializing the same heavy dependencies.

More usage instructions are at docs/USAGE.md.

Documentation related to production readiness is at docs/Production_Tests.md.


๐Ÿ’ก Inspired by

pnpm โ€” the Node.js package manager that pioneered content-addressable, symlink-based shared stores. pepip brings the same idea to the Python ecosystem.

Acknowledgements

  • uv โ€” used for venv management, package resolution, and shared download caching.

Made with โค๏ธ for developers tired of downloading torch over and over again.

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

pepip-0.0.10.tar.gz (325.6 kB view details)

Uploaded Source

Built Distribution

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

pepip-0.0.10-py3-none-any.whl (17.9 kB view details)

Uploaded Python 3

File details

Details for the file pepip-0.0.10.tar.gz.

File metadata

  • Download URL: pepip-0.0.10.tar.gz
  • Upload date:
  • Size: 325.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for pepip-0.0.10.tar.gz
Algorithm Hash digest
SHA256 f3f2a3a1375d2116ff0fbdbedb86ee0fd565e6288d1d9d9a50d1361352c91a89
MD5 039c4d34dd703286b3c52188e5946b26
BLAKE2b-256 aca5dc92643bc11c5fb29f38ecce0057bf8cdc6586e21b0817200d64dad3eaf7

See more details on using hashes here.

Provenance

The following attestation bundles were made for pepip-0.0.10.tar.gz:

Publisher: publish-pypi.yml on perf-pip/pepip

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pepip-0.0.10-py3-none-any.whl.

File metadata

  • Download URL: pepip-0.0.10-py3-none-any.whl
  • Upload date:
  • Size: 17.9 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for pepip-0.0.10-py3-none-any.whl
Algorithm Hash digest
SHA256 1c5a09d7a6cad47067a0add1b99cbc7df90a454f578beaf0086b6de29fc8c4cf
MD5 d900d0f3597911326b7acf418138a1f3
BLAKE2b-256 33d79f2c078e2a7e1c8a4ecc9ef9072fa2000c97af5f09688d5ad3f8f28d3b69

See more details on using hashes here.

Provenance

The following attestation bundles were made for pepip-0.0.10-py3-none-any.whl:

Publisher: publish-pypi.yml on perf-pip/pepip

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

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