pipx installs and runs Python applications in isolated environments.

the pain point

My need for a Python application installer came about as I was developing gdbgui and trying to streamline installation instructions for end-users. I wasn’t really satisfied with telling people to create a virtual environment and then install something, especially because these weren’t even Python devs. They were just programmers trying to debug C, C++, rust, go, etc, and activating a virtual environment, let alone having to learn what one was, just seemed like too much overhead.

existing tools

I found pipsi, made by Armin Ronacher, did exactly what I wanted. But Armin had moved on from the Python world, and the maintainers weren’t too active in responding to issues or pull requests. They were ready to let the project sunset, despite several of us creating pull requests and pushing it forward.

Shawn Hensley got a conversation started about adding new maintainers (https://github.com/mitsuhiko/pipsi/issues/178) and tagged me. While the existing maintainers were ultimately open to this idea, they found that they were not able to grant access to let us become maintainers, only Armin was. But he wasn’t responding to their requests for whatever reason. So pipsi was stuck in the water and we couldn’t attach a new motor without Armin stepping in.

git init

I decided to just start a new project, because it’s fun to git init, github repos are free, and let’s be honest, it was really the only option we had left.

I called it pipx even though the name was taken on PyPI by an abandoned project, figuring I could get the name if my effort took off. Originally it was supposed to be able to run applications like the JavaScript tool npx, hence the name, but it quickly absorbed pipsi’s capabilities and extended them.

what’s in a name?

The tool started getting more users and more popularity, but the PyPI name was causing confusion since we didn’t own it. The owner of then-pipx on PyPI was really not receptive to handing over the name even though his project was abandoned. After the discussion with him in that thread, I completely gave up on it. But a few months later after pipx gained more traction, Nick Coghlan gave it one last shot and for whatever reason, he agreed and transferred it over.

acceptance

pipx ended up gaining momentum and popularity to the point that it got adopted into the Python Packaging Authority (PyPA). Its level of adoption exceeded my expectations, and I couldn’t be more happy with how it has improved the workflow of so many developers (including mine). It’s been downloaded close to a million times as of this writing on PyPI alone, and more if you count brew and linux distros.

conclusion

pipx faced a lot of challenges and uncertainty in the early days, but ultimately it filled a need Python developers had. I can confidently say it would never exist if it weren’t for the pipsi issue Shawn randomly tagged me in. It would also not be as polished or complete as it is without the help of so many amazing developers who jumped in to improve and maintain it. Thanks to everyone who had a hand in pipx’s development.