fyn
An extremely fast Python package and project manager, written in Rust.
Start here
Pick the path that matches how you use fyn:
- New to fyn: installation, first steps, and getting help
- Working on a project: projects guide
- Running scripts: scripts guide
- Using developer tools: tools guide
- Looking for flags or config details: CLI reference, settings, and environment variables
Performance depends on the workload, platform, filesystem, and cache state. See the benchmarks reference for the current methodology and caveats.
Highlights
- A single tool to replace
pip,pip-tools,pipx,poetry,pyenv,twine,virtualenv, and more. - 10-100x faster than
pip. - Provides comprehensive project management, with a universal lockfile.
- Runs scripts, with support for inline dependency metadata.
- Installs and manages Python versions.
- Runs and installs tools published as Python packages.
- Includes a pip-compatible interface for a performance boost with a familiar CLI.
- Supports Cargo-style workspaces for scalable projects.
- Disk-space efficient, with a global cache for dependency deduplication.
- Installable without Rust or Python via prebuilt distributions or
pip. - Supports macOS, Linux, and Windows.
fyn started as an independent community fork of uv and now has its own commands and configuration surface.
Installation
Install fyn with pipx:
Then, check out the first steps or read on for a brief overview.
Tip
fyn may also be installed with standalone release assets, Homebrew, and more. See all of the methods on the installation page.
Projects
fyn manages project dependencies and environments, with support for lockfiles, workspaces, and more,
similar to rye or poetry:
$ fyn init example
Initialized project `example` at `/home/user/example`
$ cd example
$ fyn add ruff
Creating virtual environment at: .venv
Resolved 2 packages in 170ms
Built example @ file:///home/user/example
Prepared 2 packages in 627ms
Installed 2 packages in 1ms
+ example==0.1.0 (from file:///home/user/example)
+ ruff==0.5.4
$ fyn run ruff check
All checks passed!
$ fyn lock
Resolved 2 packages in 0.33ms
$ fyn sync
Resolved 2 packages in 0.70ms
Checked 1 package in 0.02ms
Inspecting and entering the project environment
Use fyn status to see whether fyn considers the current directory a managed project, whether
fyn.lock is present, and which environment and Python interpreter it is using:
$ fyn status
current directory: /home/user/example
project directory: /home/user/example
managed project: yes
workspace root: /home/user/example
pyproject.toml: yes
fyn.lock: yes
pip-in-project: warn
environment: /home/user/example/.venv
python: /home/user/example/.venv/bin/python3 (3.12.0)
Use fyn upgrade to refresh all dependencies or only the packages you name:
Use fyn shell to open a new shell with the project environment activated:
When you need to choose a PyTorch backend for the current machine without rewriting project
metadata, use fyn torch doctor:
See the project guide to get started.
fyn also supports building and publishing projects, even if they're not managed with fyn. See the packaging guide to learn more.
Scripts
fyn manages dependencies and environments for single-file scripts.
Create a new script and add inline metadata declaring its dependencies:
$ echo 'import requests; print(requests.get("https://astral.sh"))' > example.py
$ fyn add --script example.py requests
Updated `example.py`
Then, run the script in an isolated virtual environment:
$ fyn run example.py
Reading inline script metadata from: example.py
Installed 5 packages in 12ms
<Response [200]>
See the scripts guide to get started.
Tools
fyn executes and installs command-line tools provided by Python packages, similar to pipx.
Run a tool in an ephemeral environment using fynx (an alias for fyn tool run):
$ fynx pycowsay 'hello world!'
Resolved 1 package in 167ms
Installed 1 package in 9ms
+ pycowsay==0.0.0.2
"""
------------
< hello world! >
------------
\ ^__^
\ (oo)\_______
(__)\ )\/\
||----w |
|| ||
Install a tool with fyn tool install:
$ fyn tool install ruff
Resolved 1 package in 6ms
Installed 1 package in 2ms
+ ruff==0.5.4
Installed 1 executable: ruff
$ ruff --version
ruff 0.5.4
See the tools guide to get started.
Python versions
fyn installs Python and allows quickly switching between versions.
Install multiple Python versions:
$ fyn python install 3.10 3.11 3.12
Searching for Python versions matching: Python 3.10
Searching for Python versions matching: Python 3.11
Searching for Python versions matching: Python 3.12
Installed 3 versions in 3.42s
+ cpython-3.10.14-macos-aarch64-none
+ cpython-3.11.9-macos-aarch64-none
+ cpython-3.12.4-macos-aarch64-none
Download Python versions as needed:
$ fyn venv --python 3.12.0
Using CPython 3.12.0
Creating virtual environment at: .venv
Activate with: source .venv/bin/activate
$ fyn run --python pypy@3.8 -- python
Python 3.8.16 (a9dbdca6fc3286b0addd2240f11d97d8e8de187a, Dec 29 2022, 11:45:30)
[PyPy 7.3.11 with GCC Apple LLVM 13.1.6 (clang-1316.0.21.2.5)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>>>
Use a specific Python version in the current directory:
See the installing Python guide to get started.
The pip interface
fyn provides a fast, pip-compatible interface for common pip, pip-tools, and virtualenv
workflows.
fyn extends their interfaces with advanced features, such as dependency version overrides, platform-independent resolutions, reproducible resolutions, alternative resolution strategies, and more.
For many common workflows, you can switch to the fyn pip interface with minimal changes and keep
the same overall workflow shape, while getting a 10-100x speedup.
Mutating fyn pip commands operate directly on the selected environment. They do not update
pyproject.toml or fyn.lock; for managed project workflows, use fyn add, fyn remove,
fyn sync, or fyn upgrade instead.
Compile requirements into a platform-independent requirements file:
$ fyn pip compile requirements.in \
--universal \
--output-file requirements.txt
Resolved 43 packages in 12ms
Create a virtual environment:
$ fyn venv
Using CPython 3.12.3
Creating virtual environment at: .venv
Activate with: source .venv/bin/activate
Install the locked requirements:
$ fyn pip sync requirements.txt
Resolved 43 packages in 11ms
Installed 43 packages in 208ms
+ babel==2.15.0
+ black==24.4.2
+ certifi==2024.7.4
...
See the pip interface documentation to get started.
Learn more
See the first steps or jump straight to the guides to start using fyn.