Pyenv is an excellent tool to have in your tool-set, it manages Python versions much like rbenv for Ruby, in fact it was forked from it.

pyenv lets you easily switch between multiple versions of Python. It’s simple, unobtrusive, and follows the UNIX tradition of single-purpose tools that do one thing well.


The automatic installer provided in GitHub will take care of everything so you don’t have to worry about configuring anything. (pro-tip: triple click to select the whole line).

curl -L | bash

That’s the only thing you have to do, if you’re having issues installing a python version then you will have to install the development libraries:

sudo apt-get install -y make build-essential libssl-dev zlib1g-dev libbz2-dev \
libreadline-dev libsqlite3-dev wget curl llvm libncurses5-dev libncursesw5-dev \
xz-utils tk-dev


Install another version:

pyenv install 2.7.14
# Output
Downloading Python-3.6.4.tar.xz...
Installing Python-3.6.4...
Installed Python-3.6.4 to /home/franccesco/.pyenv/versions/3.6.4

Check installed versions

pyenv versions
# Output
* 2.7.14 (set by /home/franccesco/.pyenv/version)

Check current version

pyenv version
# Output
2.7.14 (set by /home/franccesco/.pyenv/version)

Set global version

pyenv global 3.6.4
# No output; check with version command.

Set python version per directory

pyenv local 2.7.14
# No output; check with version command.

A file named .python-version should contain the python version to use uppon entering the folder: cat .python-version

# Output

Uninstall a version

pyenv uninstall 2.7.14
# Output
pyenv: remove /home/franccesco/.pyenv/versions/2.7.14? yes

Update Pyenv

pyenv update
# Output
Updating /home/franccesco/.pyenv...
 * branch            master     -> FETCH_HEAD
Already up-to-date.
-- SNIP --
Updating /home/franccesco/.pyenv/plugins/pyenv-virtualenv...
 * branch            master     -> FETCH_HEAD
Already up-to-date.
Updating /home/franccesco/.pyenv/plugins/pyenv-which-ext...
 * branch            master     -> FETCH_HEAD
Already up-to-date.

Final Words

Pyenv has a great integration with Pipenv and you can manage Python versions and package versions with both of them at the same time without any hassle, I greatly recommend you to check them out.

Read more | Pyenv Repository