As we know python is an unavoidable programming language when it comes to Infrastructure automation or IT Operations. Directly or indirectly Python plays an important role in DevOps as it is the popular backend programming language say, Docker, Puppet, Ansible, and more. But the painful part is the different versions of python in the operating system. Many Operating System comes with default python 2.x and some automation requires python 3.x. To mitigate these issues, we have a Simple Python Version management Tool called the pyenv. In this article, we will discuss How to Manage multiple Python Versions with the pyenv.
Table of Contents
How Pyenv works?
In the background, Pyenv injects Shim executables into the PATH
to define which version of python needs to be used while you run the python commands. So how this PATH
thing works? So, whenever you run python or pip command, your OS platform will search the executable in the list of executable directories called PATH
. This PATH
is the list of directories that is separated with a colon like /usr/local/bin:/usr/bin:/bin
. This will help us to Manage multiple Python Versions with the pyenv.
So, as we discussed, the pyenv uses Shims which are lightweight executables that will pass the commands with the pyenv executable ($(pyenv root)/shims:/usr/local/bin:/usr/bin:/bin
). This will work in the following order.
So, whenever you execute the shim, the pyenv will determine the python version you should be using by following order.
- Environment Variable:
PYENV_VERSION
is the environment variable that needs to be set with the needed python version. - Locally, Current Directory file: keep the file called
.python-version
in the current working directory. This can be modified by passing the command called pyenvlocal
. - Globally: the python version can be modified globally by using the command call pyenv global.
If none of the above options are not available, the python will use the System default python version.
How to Install Pyenv on various Platforms?
Now lets discuss the Installation if pyenv on various platforms. Before that, we will discuss the Requirements of the pyenv.
Prerequisites
Lets quickly discuss the Dependencies and Prerequisites in the below list
Using pyenv-installer
Once you installed all the dependencies as mentioned in the above section, you can go and straightaway runs the following command to install the pyenv.
$ curl https://pyenv.run | bash
Then, don’t forget to add the following lines in to the .bashrc
file.
export PATH="$HOME/.pyenv/bin:$PATH"
eval "$(pyenv init -)"
eval "$(pyenv virtualenv-init -)"
Then, restart the terminal session to make it effective.
Manage Multiple Python versions.
Just like any other package manager, using pyenv, you can install a specific version of python and manage the versions in your operation system. Let’s see them one by one.
Install Python using pyenv
So, you can use the install command and following that the version number to install the python. Before that, you can see all the available versions of python by running the following command
$ pyenv install --list
Available versions:
2.1.3
2.2.3
2.3.7
2.4.0
2.4.1
2.4.2
2.4.3
2.4.4
2.4.5
2.4.6
2.5.0
2.5.1
2.5.2
2.5.3
2.5.4
2.5.5
2.5.6
2.6.6
2.6.7
2.6.8
2.6.9
2.7.0
2.7-dev
2.7.1
2.7.2
2.7.3
2.7.4
2.7.5
2.7.6
2.7.7
2.7.8
2.7.9
2.7.10
2.7.11
2.7.12
2.7.13
2.7.14
2.7.15
2.7.16
2.7.17
2.7.18
3.0.1
3.1.0
3.1.1
3.1.2
3.1.3
3.1.4
3.1.5
...
...
... # more....
Then If you want to install the specific version from the list, use the following command.
$ pyenv install -v 3.7.2
/tmp/python-build.20210408021412.23512 ~
Downloading Python-3.7.2.tar.xz...
-> https://www.python.org/ftp/python/3.7.2/Python-3.7.2.tar.xz
Installing Python-3.7.2...
/tmp/python-build.20210408021412.23512/Python-3.7.2 /tmp/python-build.20210408021412.23512 ~
[...]
Installing collected packages: setuptools, pip
Successfully installed pip-18.1 setuptools-40.6.2
Installed Python-3.7.2 to /home/vagrant/.pyenv/versions/3.7.2
You can see all your installed version of python by listing the following directory location
$ ls ~/.pyenv/versions/
2.7.15 3.7.2 3.10-dev
If you want to uninstall the specific version of python, you can simply remove the directory of the specific version or you can use the following command.
$ rm -rf ~/.pyenv/versions/3.10-dev
OR
$ pyenv uninstall 3.10-dev
Managing default python using pyenv
Once you install and keep the needed list of python on your pyenv list, you can chose and set the default version of the python using pyenv commands. To see the list of installed python versions, use the following command
$ pyenv versions
* system (set by /home/vagrant/.pyenv/version)
2.7.15
3.7.2
Now if you want to keep the python version 3.7.2 as the system default, you can simply use the following commands.
$ pyenv global 3.7.2
Now go ahead and check the python version like we normally do with python command and you will see the default version changed.
$ python -V
Python 3.7.2
And the same can be seen on the pyenv listing.
$ pyenv versions
system (set by /home/vagrant/.pyenv/version)
2.7.15
* 3.7.2
So the asterisk pointed is the default version of the python which is install and set default by pyenv globally.
Some more Important commands are:
Similarly, pyenv can do much more things apart from basic version management. Like, managing multiple versions of python in a different virtual environment and Managing multiple versions of python Simultaneously. We will discuss more features of pyenv in our upcoming article.
Conclusion
In this article, we have discussed How to Manage multiple Python Versions with Pyenv. In the upcoming article, we will discuss How to manage multiple versions of python in different virtual environments and How to manage multiple versions of python Simultaneously. If you have questions and doubts about the Installation or Concepts or in the procedure, feel free to write a comment on this article. Stay tuned and subscribe DigitalVarys for more articles and study materials on DevOps, Agile, DevSecOps, and App Development.
Experienced DevSecOps Practitioner, Tech Blogger, Expertise in Designing Solutions in Public and Private Cloud. Opensource Community Contributor.
It is now the need of market. Smartphone App Development for healthcare, travel, manufacturing or any other industry is most important thing, this unique and very accurate information about the web development and coding help so much. Subscribed your blog for more blog updates.
hello, On ventura, when I look under “/usr/local/bin/python” there are no directories. I did the above, so python version is correctly installed
bash-3.2$ python -V
Python 2.7.18
How do you get /usr/local/bin/python to go to 2.7.18 versus python 3 which is standard on