Pyenv – Python Version Management Made Easier

Pyenv - Python Version Management Made Easier

You’re a programmer who wants to test your python code on multiple different Python environments. What would you do? Install a specific python version and test your code and then uninstall that version and again install another different version and test code? No, wait! It is completely unnecessary. Say hello to Pyenv , an useful utility to manage multiple Python versions, simultaneously. It made the python version management easier than ever. It is used to install, uninstall and switch to multiple different versions of Python.

Pyenv allows you to change the global Python version on a per-user basis, provide support for per-project Python versions, override the Python version with an environment variable, and search commands from multiple versions of Python at a time. Pyenv can be used to test your code across multiple python environments. In this tutorial, we will how to install and use Pyenv on GNU/Linux.

Installing Pyenv

First of all, install the following packages to avoid the common build problems.

For Debian based systems:

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

For RPM based systems:

$ sudo yum install zlib-devel bzip2 bzip2-devel git readline-devel sqlite sqlite-devel openssl-devel xz xz-devel

For SUSE/openSUSE:

$ sudo zypper in zlib-devel bzip2 libbz2-devel git readline-devel sqlite3 sqlite3-devel libopenssl-devel xz xz-devel

We have just installed the necessary prerequisites. It is time to install Pyenv. The official and recommended way to install Pyenv is using the pyenv-installer script. All you have to do is run the following command in your shell to install pyenv.

$ curl -L | bash

At the end of the installation, the installer will notify you to add Pyenv to your PATH. In my case, I added the following lines in my ~/.bash_profile file.

 export PATH="/home/ostechnix/.pyenv/bin:$PATH"
 eval "$(pyenv init -)"
 eval "$(pyenv virtualenv-init -)"

Run the below command to take effect the changes.

$ source ~/.bash_profile

Pyenv is ready to use. Now let us see how to manage different versions of Python using Pyenv.

Python Version Management Made Easier

First, let us see all available versions. To do so, simply run the following command:

$ pyenv install -l


$ pyenv install --list

You should an output something like below.

Available versions:

To list the currently installed Python versions:

$ pyenv versions
* system (set by /home/ostechnix/.pyenv/version)

By default, Pyenv uses our system default python. Here * indicates default.

Install Python

Let us say you need Python 2.7.14 and 3.6.4 versions on your system.

To do so, just run:

$ pyenv install 2.7.14

To install Python 3.6.4, run:

$ pyenv install 3.6.4

You don’t need sudo rights. All Python versions will be installed under a separate directory in the pyenv root directory in your $HOME. The default pyenv root directory is ~/.pyenv. For example, Python 2.7.14 is installed under /home/ostechnix/.pyenv/versions/2.7.14 in my case.

$ ls /home/ostechnix/.pyenv/versions/
2.7.14 3.6.4

Now list the installed Python versions.

$ pyenv versions
* system (set by /home/ostechnix/.pyenv/version)

Switching between different Python versions

We can switch to different python in two ways, globally and locally.

Let us see the current global python version using command:

$ pyenv global

There are none. My system still uses the system default python. Let us switch to different Python version, for example 2.7.14.

$ pyenv global 2.7.14

Now check the default Python version:

$ pyenv versions
* 2.7.14 (set by /home/ostechnix/.pyenv/version)

Did you notice the star(*)? Yes, 2.7.14 is our global default Python version.

You can also specify multiple versions as global Python at once. Let’s say if you have two versions of 2.7.14 and 3.6.4. If you prefer 2.7.14 over 3.6.4, just run:

$ pyenv global 2.7.14 3.6.4

Now check the global versions.

$ pyenv versions
* 2.7.14 (set by /home/ostechnix/.pyenv/version)
* 3.6.4 (set by /home/ostechnix/.pyenv/version)

Now 2.7.14 and 3.6.4 are the default global versions.

We can set a local application-specific (per project) Python version by writing the version name to a .python-version file in the current directory. Please note that the local version overrides the global version, and can be overridden itself by setting the PYENV_VERSION environment variable or with the pyenv shell command.

Switch to your project directory:

$ cd myproject/

Let us switch to 3.6.4.

$ pyenv local 3.6.4

Check the current local python version.

$ pyenv versions
* 3.6.4 (set by /home/ostechnix/myproject/.python-version)

Setup Virtual Environment

To setup a virtual environment with specific Python version, do:

$ pyenv virtualenv 3.6.4 myenv

To make it globally available, run:

$ pyenv global myenv
(myenv) [email protected]:~$

You’re in your virtual environment now. Do whatever you want. Install, remove python applications using pip and what not. It’s all yours.

If you want to setup a local virtual environment (per directory):

CD to the your project directory and run:

$ pyenv local mylocalenv

To remove a virtual environment, just do:

$ pyenv uninstall myenv
pyenv-virtualenv: remove /home/ostechnix/.pyenv/versions/3.6.4/envs/myenv? y

Removing specific python version

To uninstall a specific python version, for example 3.6.4:

$ pyenv uninstall 3.6.4

Alternatively, simply remove the directory of the version you want to remove.

Check the currently installed python versions:

$ pyenv versions

For more details, read the help section by running the following command:

$ pyenv

Also, check “pyenv help <command-name>” for information on a specific command. For example, you can view the information of “install” command as below.

$ pyenv help install

And, that’s all. As you can see, managing multiple Python versions is quite easy! If you’re a Python programmer, Pyenv is an essential tool to keep in your arsenal.



Thanks for stopping by!

Help us to help you:

Have a Good day!!

You may also like...

Leave a Reply

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