Stop Using pipx: Why uv Is The Only Python Tool Manager You Need
7 mins read

Stop Using pipx: Why uv Is The Only Python Tool Manager You Need

I have a confession. For about five years, I was the biggest advocate for pipx you’d ever meet. I annoyed my coworkers about it. I wrote documentation forcing people to use it. “Don’t pip install globally!” I’d yell at interns, looking like a maniac. “Use pipx! It isolates environments!”

And look, I wasn’t wrong. At the time.

But it’s 2026 now. If you are still using pipx to manage your CLI tools, you are wasting your time. Literally. You are sitting there watching a progress bar spin while I’ve already finished the task and gone to grab a coffee.

I finally ripped the band-aid off last month. I uninstalled pipx. I cleared out my ~/.local/bin. I went all-in on uv as my tool manager. And honestly? I feel stupid for not doing it sooner.

The Need for Speed (and Sanity)

We all know Python packaging has been… let’s call it a “mess” to be polite. A dumpster fire if we’re being honest. pipx was the fire extinguisher. It let us install things like black, ruff, or poetry in isolated environments so they wouldn’t fight over dependencies. It worked. It was just slow.

Painfully slow.

Enter uv. When Astral first dropped this thing, I thought it was just a fast pip replacement. Cool, my CI/CD pipelines run faster. Whatever. But then they added the tool management features, and the game changed completely. It’s written in Rust, which seems to be the answer to “why is my dev tooling slow” these days.

Here is the difference. Installing a heavy tool like Aider (which I use constantly for coding assistance) used to take solid minutes on my machine with pipx. It had to resolve dependencies, build wheels, set up the venv… you know the drill.

With uv? It’s basically instant. I’m not exaggerating.

# The old way (Time to go make a sandwich)
$ pipx install aider-chat

# The new way (Don't blink)
$ uv tool install aider-chat

It caches everything aggressively. It resolves dependencies in parallel. It just flies. And because it manages its own Python versions, I don’t have to worry if my system Python is outdated or if Homebrew broke my symlinks again (which happens, like, every other update).

Python programming language - A 10 Minute Guide To The Python Programming Language
Python programming language – A 10 Minute Guide To The Python Programming Language

The “Run and Done” Workflow

The real killer feature isn’t even the installation. It’s the execution.

Coming from the JavaScript world, you might know npx. It lets you run a tool once without permanently installing it. Python never really had a great equivalent that felt snappy. pipx run existed, sure, but the startup penalty was high enough that I rarely used it.

uvx is that equivalent. And it is glorious.

Let’s say I want to try out a new CLI tool, or I just need to run a quick analysis script that I don’t want cluttering my path. I don’t install it. I just run it.

# Run Aider directly without "installing" it first
$ uvx aider-chat

# Need a specific version?
$ uvx aider-chat@0.69.0

I use this constantly for Aider specifically. Why? Because AI tools update fast. Like, multiple times a week fast. If I “install” it, I’m constantly running update commands. With uvx, I’m always grabbing the latest cached version or pulling a fresh one in milliseconds. It keeps my environment clean and my tools bleeding edge.

It Manages Python, Too

Here’s where I actually got angry at myself for sticking with the old ways too long. I used to juggle pyenv to manage Python versions. Then I’d have poetry for projects. Then pipx for tools.

Three different tools. Three different config files. Three different ways to break my path.

uv replaced all of them. All. Of. Them.

When I run a tool with uv, it doesn’t just look for the Python on my system. If the tool needs Python 3.12 and I don’t have it, uv fetches a standalone build of Python 3.12, puts it in a managed directory, and uses it. I didn’t have to install it. I didn’t have to compile it. It just happened.

I was working on a legacy project last Tuesday that absolutely required Python 3.10. Usually, that’s a groan-inducing moment where I have to go check if I still have 3.10 installed, maybe re-link it in pyenv… a whole ordeal.

Command line interface terminal - What is the Command Line Interface (CLI)
Command line interface terminal – What is the Command Line Interface (CLI)

With uv, I just told it what I wanted.

$ uv run --python 3.10 main.py

It downloaded Python 3.10 (took about 4 seconds), created the venv, installed dependencies, and ran the script. I almost cried.

The Migration is Trivial

If you’re worried that switching is going to be a weekend project, don’t be. It took me about ten minutes. The hardest part was remembering all the random junk I had installed via pipx over the years.

Here is my exact workflow for switching:

  1. List your current tools: pipx list
  2. Install uv (if you haven’t already): curl -LsSf https://astral.sh/uv/install.sh | sh
  3. Reinstall your essentials. For me, that was:
uv tool install ruff
uv tool install mypy
uv tool install aider-chat
uv tool install httpie

That’s it. You can uninstall pipx whenever you feel emotionally ready to let go. I kept it around for a week “just in case,” but I never touched it.

One Minor Gotcha

Command line interface terminal - File Director Command Line Interface
Command line interface terminal – File Director Command Line Interface

I’m not going to sit here and pretend it’s perfect software. Nothing is. The one thing that tripped me up initially was how uv handles .python-version files compared to pyenv. It’s stricter.

If you are in a directory with a pinned version, uv respects it aggressively. I spent ten minutes debugging why a global tool was trying to use a specific virtual environment before realizing I was running it from inside a project folder that had a config file I forgot about. That’s user error, sure, but it’s a shift in mental model. uv cares about context more than pipx did.

Why This Matters for AI Coding

Bringing this back to Aider for a second—because that’s where I spend half my life these days. The synergy between fast AI tools and a fast installer is underrated. When I’m coding with an AI assistant, I want to minimize friction. If the AI suggests a new library or tool, I want to test it now, not in five minutes.

Being able to type uvx some-random-library-cli and have it running instantly keeps me in the flow state. It makes the terminal feel less like a maintenance chore and more like an extension of my brain. That sounds cheesy, I know. But when your tools are slow, you think twice before trying things. When they are instant, you experiment more.

So, seriously. Stop clinging to the past. pipx served us well. It was a hero when we needed it. But it’s time to retire it. Install uv, and get your time back.

Leave a Reply

Your email address will not be published. Required fields are marked *