pipx : life saver
If you are a Python developer, you probably use different virtual environments depending on your project’s requirements.

I manage my Python environments via pyenv. It’s great tool for Python
version and package isolation. Some of the Python packages include binary
tools for global usage such as pip, django-admin and many more.
When you switch Python version via changing directory or activating a virtualenv, you loose global binary helpers. All of the binary/executables are isolated and you can not access those tools on a global scope.
My global Python version is set on ~/.bashrc. Without activating any
virtualenv, my global Python is under the ~/.pyenv/shims/python and whenever
I pip install package, can be accessible from ~/.pyenv/versions/3.7.0/bin/.
If I activate any environment, pyenv shims the $PATH and accessing
previously installed binaries were almost impossible until pipx.
pipx creates isolated environments for each package and provides system-wide
access to your pipx based installed modules. By default, pipx creates and
installs everything based on ~/.local/pipx folder.
I like to use bumpversion for my projects. I installed bumpversion
package via pipx and after that, bumpversion became available for any
Python version or any virtualenv without activating or doing extra tricks.
Installation
First, install pipx via pip and fix your $PATH variable;
$ pip install --user pipx
# fix your $PATH, ~/.bashrc ?
export PATH="${HOME}/.local/bin:${PATH}"
Now try;
$ pipx --help
for bash-completion support, add this to your shell startup (such as ~/.bashrc)
eval "$(register-python-argcomplete pipx)"
Usage
Now, install any Python package via pipx install PACKAGE. You can let pipx
to install package dependencies via pipx install PACKAGE --include-deps
$ pipx install bumpversion
$ pipx install twine
Check what you’ve installed:
$ pipx list
Now your Python executables are accessible from anywhere in your environment!
- Creator/Maintainer: Chad Smith
- Logo by @IrishMorales.