Pyenv to the rescue
I recently switched to Debian testing again so as to be able to use Python 3.6 among other things. I started working with this version, creating my Lambda Layers and everything was fine until Debian testing switched to Python 3.7. Well, I told myself, there is no drama, using alternative
I can switch versions of Python smoothly or set virtualenv
to use one interpreter or another.
:~# update-alternatives --config python
There are 3 choices for the alternative python (providing /usr/bin/python).
Selection Path Priority Status
------------------------------------------------------------
0 /usr/bin/python3.6 3 auto mode
1 /usr/bin/python2 1 manual mode
2 /usr/bin/python3 2 manual mode
* 3 /usr/bin/python3.6 3 manual mode
Press <enter> to keep the current choice[*], or type selection number: 3
But even using alternative
or forcing the interpreter to use Python 3.6 it seems there is always something pointing to Python 3.7:
$ virtualenv -p /usr/bin/python3.6 test
Running virtualenv with interpreter /usr/bin/python3.6
Traceback (most recent call last):
File "/home/lgallard/.local/lib/python3.7/site-packages/virtualenv.py", line 22, in <module>
import distutils.spawn
ModuleNotFoundError: No module named 'distutils.spawn'
pyenv to the rescue
There is a version manager of Python called pyenv which allows you to configure the environment to use both locally and globally.
For example, to install Python version 3.6.8 just do
pyenv install 3.6.8
We can verify the versions as follows:
$ pyenv versions
system
* 3.6.8 (set by /home/lgallard/.pyenv/version)
Then to use the version installed with pyenv, just pass the path:
$ virtualenv -p ~/.pyenv/versions/3.6.8/bin/python test
Running virtualenv with interpreter /home/lgallard/.pyenv/versions/3.6.8/bin/python
Using base prefix '/home/lgallard/.pyenv/versions/3.6.8'
New python executable in /home/lgallard/test/bin/python
Installing setuptools, pip, wheel...
done.
./test/bin/python --version
Python 3.6.8
This way I was able to keep using the specific Python version I needed.
References:
Leave a Comment