CLI helper for keeping Python venvs outside synced project folders
Project description
uvlink
Keep project folders light by storing Python virtual environments in a single cache and linking them back into each repo. uvlink is handy when your projects live inside cloud-synced drives and you do not want .venv directories eating up bandwidth.
Requirements
- Python 3.12+
- macOS or Linux shell with symlink support
[!WARNING] uvlink is currently only tested on Apple Silicon (M-series) machines running macOS Tahoe. Other operating systems or architectures have not been validated yet.
Install
Using uv tool (recommended)
$ uv tool install uvlink
This installs the CLI into your ~/.local/bin (or platform equivalent) with isolated dependencies handled by Astral's uv.
Using pip
$ pip install uvlink
Usage
uvlink ships with a Typer CLI. Run uvlink --help (or python -m uvlink.cli --help) to view every option.
Common commands:
$ uvlink link
This assumes your current working directory is a Python project folder.
Use
$ uvlink --project-dir /path/to/project link
if you want to operate on a directory other than the current one.
Notes
uvlink stores environments under ~/.local/share/uvlink/cache/<venv-type>/<project-name>-<hash>/venv and makes a symlink ./.venv back into that. Each project receives a stable hash based on its absolute path, so repeated runs target the same cache location.
Contributing
Issues and pull requests are welcome. Please keep docstrings and comments in the Google style already used throughout the codebase and run the included linters/formatters before submitting. A pre-commit configuration is provided that runs Ruff and Black; install it with pre-commit install to match formatting.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file uvlink-0.3.0.tar.gz.
File metadata
- Download URL: uvlink-0.3.0.tar.gz
- Upload date:
- Size: 4.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: uv/0.9.9 {"installer":{"name":"uv","version":"0.9.9"},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a000fda6073c2cd64d7ae1b7c03501a29620a9c2693144184d4eec57c20bb8ad
|
|
| MD5 |
89cd13ded00ac48b4df25a46623670f2
|
|
| BLAKE2b-256 |
f2186d0265b659ef20944d162928ccd967b16f4222355c9f60a3699addf9e03f
|
File details
Details for the file uvlink-0.3.0-py3-none-any.whl.
File metadata
- Download URL: uvlink-0.3.0-py3-none-any.whl
- Upload date:
- Size: 6.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: uv/0.9.9 {"installer":{"name":"uv","version":"0.9.9"},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
4abcefef8c71260c72381cc5f6a28bd4be978123ce35cfc001e476a0934bdd14
|
|
| MD5 |
77e66bd2d26092ed4c19953cf9bd51dd
|
|
| BLAKE2b-256 |
1ee76090e387878ce7f6e5b7cdad0f92cfbda4c6e451e31be7e438e24b75b5b9
|