Ultra Violent Python
Imagine if, in some alternate reality, you had an easy way to create and manage your Python projects — without the chaos of generating a pile of config files, dealing with unruly virtual environments, and constantly installing things with pip and –break-system-packages. Just stop and meet Ultra Violent Python!
Violence is never the answer — it’s a question, and the answer is always YES!
If you’ve ever lost your mind over pip, virtualenv, pyenv, pip-tools, twine, poetry, and friends, take a deep breath: Ultra Violent Python (now known simply as uv) is here to simplify your life. Written in Rust, uv is a package and project manager for Python that promises to be faster than the squirrel from “Over the Hedge” after downing an energy drink.

But why “Ultra Violent”?
“Ultra Violent Python” isn’t because the little snakes are aggressive — it’s because that’s exactly what I wanted to do to my computer before I discovered uv. Smash everything. With enthusiasm. And have a time machine to do it over and over again.
With uv, you can:
- Install and manage multiple Python versions;
- Create and manage virtual environments automatically;
- Handle project dependencies efficiently;
- Reproduce work environments with ease;
- Build and publish Python packages.
In short, uv is the missing piece Python always needed.
Before and after uv
BEFORE UV:
> pip install this
> virtualenv that
> source activate_env
> forgot the Python version
> everything broke
AFTER UV:
> uv init my_project
> uv add requests
> uv run
🧘🏻♀️ inner peace
Alright. But how do I install and use uv?
In theory, the ninja way to install the latest version:
On macOS and Linux:
curl -LsSf https://astral.sh/uv/install.sh | sh
On Windows, via PowerShell:
powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"
If you prefer, you can install uv using pipx:
pipx install uv
Or, if you’re feeling bold:
pip install uv
But be careful: installing directly with pip can mess up your global environment. Use with proper moderation. Just kidding — go ahead and throw a –break-system-packages in there and GG.
Caught in a lie? Check for updates!
I lied up there about installing the latest version. Yeah, I do that sometimes on this site.
Just kidding. I only tell the truth. You will have installed the latest version — but it’s always a good idea to run a good old update every now and then.
Do it like this:
uv self update
If you installed via pipx:
pipx upgrade uv
I installed this thing — now what?
Now you can start using uv to manage your Python projects. To create a new project, navigate to the directory where you want it and run:
uv init villain_snake
This creates the basic project structure, including:
- A .venv virtual environment;
- A pyproject.toml file with project settings;
- An empty README.md;
- A main.py file with a simple “Hello World”.
To run the main script:
uv run main.py
On first run, uv creates the virtual environment and executes the script. Simple as that.
What about dependency management?
Easy there, young Padawan — dependencies are now managed at the project level. No more running a million virtual environment commands or sledgehammering things directly into the OS with –break-system-packages.
To add a dependency:
uv add requests
To update:
uv pip install --upgrade requests
To remove:
uv remove requests
For development dependencies:
uv add --dev pytest
To make sure everyone has the same environment:
uv lock
uv sync
Building and Publishing Packages
The uv build command packages your Python project — it prepares everything so you can distribute it as an installable package (via PyPI, for example). It works as a builder following the PEP 517 standard - link: https://go.beckerig.com/pep
In practice, what it does is:
- Read your pyproject.toml;
- Generate .tar.gz (source distribution) and .whl (wheel) files;
- Neatly place everything in the dist/ folder.
Example project structure:
villain_snake/
├── villain_snake/
│ ├── __init__.py
│ └── core.py
├── tests/
│ └── test_core.py
├── README.md
├── LICENSE
├── pyproject.toml
├── uv.lock
└── .venv/
And a basic pyproject.toml:
[project]
name = "villain_snake"
version = "0.1.0"
description = "Angry snakes that smash computers with pip"
authors = [{ name="Alvin", email="[email protected]" }]
dependencies = ["requests"]
[build-system]
requires = ["setuptools", "wheel"]
build-backend = "setuptools.build_meta"
After running build:
uv build
You’ll have a dist/ folder like this:
villain_snake/
├── dist/
│ ├── villain_snake-0.1.0.tar.gz
│ └── villain_snake-0.1.0-py3-none-any.whl
Is uv fast?
Yes, so fast it almost feels like it didn’t do anything. You’ll do an ls convinced it bugged out. Spoiler: it didn’t bug. It’s just fast — genuinely fast (thanks, Rust!).
Wrapping up nicely
uv is a powerful tool that simplifies Python project management. With it, you can, very comfortably:
- Install and manage multiple Python versions;
- Create and manage virtual environments automatically;
- Handle dependencies efficiently;
- Build and publish packages with ease.

If you’re tired of juggling multiple tools to manage your Python projects, uv is the all-in-one solution you’ve been looking for.
And if you still prefer poetry (https://go.beckerig.com/poetry) , that’s fine too… everyone gets to choose their own suffering.
More info: