uv is awesome
astral-sh/uv is the best Python AiO tool that I've used. Granted, I haven't used a lot; but still. It's pretty good.
- It manages your Python version so you don't have to wrangle with that at all.
- It has
--dev
dependencies unlike plain pip - You can still use
uv pip <pip_command_args>
just as you would normalpip
- It's β‘fastβ‘
- It follows PEP standards instead of doing its own thing (looking at you Poetry)
- A single binary
- Doesn't require Python to install uv
It does have some downsides:
- Doesn't bundle a formatter or linter (still have to
uv add ruff
) - Doesn't have a task runner (no
uv task <task_name>
) - Nobody knows about it
- People confuse it with
rye
- It doesn't have its own build backend (yet)
- It doesn't bundle a type hint checker
The easiest way to install uv is through one of their installer scripts:
- macOS & Linux
-
curl -LsSf https://astral.sh/uv/install.sh | sh
- Windows
-
powershell -c "irm https://astral.sh/uv/install.ps1 | iex"
π You can find more installation instructions on the uv website.
Now to create a Python package and publish it to PyPI is as simple as this:
uv init --lib
uv add --dev ruff pyright poethepoet pyinstaller
$EDITOR src/*.py
uv publish
Cool, right? It even manages the Python installation for you automatically.
You can even write standalone Python scripts like this:
#!/usr/bin/env uv run
# /// script
# requires-python = ">=3.12"
# dependencies = [
# "requests",
# "rich",
# ]
# ///
import requests
from rich.pretty import pprint
resp = requests.get("https://peps.python.org/api/peps.json")
data = resp.json()
pprint([(k, v["title"]) for k, v in data.items()][:10])
π Read more about running scripts with uv
If you're looking to install a pip
-provided CLI tool globally like pip install cmakelang
provides cmake-format
you can use uv tool install cmakelang
. There's also uvx
if you want the npx
equivalent.
I think uv is cool. It's fast, easy to install, and it gets out of your way. You just write code and use uv run <my_package>
or uv run ./entry_point.py
to run your project. The virtual environment is not hidden like Poetry; it's right there in .venv
if you want to go poking around.