pipx is a command-line tool that installs Python-based command-line tools into separated "virtual" environments, which are isolated from your global Python installation and from each other. We will cover virtual environments and the
virtualenv tooling in more depth in Part 4.
Please note that pipx is not made for installing Python libraries. It is made only for installing Python command-line tools, that is packages which have command-line endpoints like
youtube-dl. You can find an interesting comparison of pipx vs other similar tools in the pipx documentation.
Note: This tutorial is part of a series about Python environments. You can go back to the first part with this link: Sane Python environment Part 1, isolation.
Before starting this tutorial, make sure you installed pyenv using Part 1 of the tutorial.
Before installing pipx, make sure your global Python points to a specific version of Python 3 such as
3.8.1, and not to the
Indeed, pipx is installed with
pip, which makes it dependent on your global Python installation, and you don't want to ruin your system installation. Moreover, pipx will attempt to install all tools using the version of the pyenv it was itself installed with. That is also why it's important to have picked a version of Python 3 as global Python, because nowadays most tools are no longer maintained in Python 2. If you change your global Python to another version than the one pipx was installed with, calls to
pipx will be rejected by pyenv, saying that there is no
pipx command for the global Python you are using.
These caveats being said, here are the commands to install pipx:
pip install pipx
pipx ensurepath which adds the pipx
bin directory to your
$PATH, similarly to when we modified the
$PATH for pyenv
Note that in the pipx documentation, the author is recommending to add the
--user flag, which makes Pip install in your
$HOME instead of a sub-directory of
/usr. In our case, it is not necessary because pyenv is already installed in your
$HOME by design.
Once pipx is installed, you can use it to install all kinds of Python command line tools, such as
➜ pipx install flake8
Cache entry deserialization failed, entry ignored
installed package flake8 3.7.9, Python 3.8.1
These apps are now globally available
done! ✨ 🌟 ✨
# See how flake8 was installed in a virtualenv by pipx
➜ ls -al $(which flake8)
[...] /home/pierre/.local/bin/flake8 -> /home/pierre/.local/pipx/venvs/flake8/bin/flake8
As shown by the
ls command, pipx installs all tools within their own separate directory inside the
~/.local/pipx/venvs directory and symlinks them to
Thanks to these isolated directories in
~/.local/pipx/venv, we are no longer worried that a new tool might break an existing tool. Indeed, each tool upgrade or installation occurs within its own directory without any possible side-effect on other tools. Whenever you want to upgrade your tools, you can simply run
pipx upgrade-all. You can also use
pipx upgrade to selectively upgrade some of your tools only.
If you need to uninstall pipx, first remove all the tools it installed:
Then, similarly to pyenv:
export PATH=... line containing pipx
rm -rf ~/.local/pipx
Now that you are familiar with pipx, you can learn about Python virtualenvs in Part 4 of the tutorial.