Pyenv al rescate

1 minute read

Python


El problema

Hace poco cambié a Debian testing nuevamente para entre otras cosas poder usar Python 3.6. Empecé a trabajar con esta versión, a crear mis Lambda Layers y todo bien hasta que Debian testing cambió a Python 3.7. Bueno, me dije a mí mismo, no hay drama con alternative puedo cambiar versiones de Python sin problemas o de última decirle a virtualenv que use un intérprete u otro.

:~# 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

Pero incluso usando alternative o forzando el intérprete para usar Python 3.6 al parecer queda algo siempre apuntando a 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 al rescate

Existe una manejador de versiones de Python llamado pyenv el cual permite configurar el entorno a usar tanto local como de forma global.

Por ejemplo, para instalar la versión de Python 3.6.8 basta con hacer:

pyenv install 3.6.8

Podemos verificar las versiones de la siguiente manera:

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

Luego para usar la versión instalada con pyenv, basta con pasarle la ruta:

$ 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

De esta forma pude seguir usando la versión especifica de Python que necesitaba.

Referencias:

Leave a Comment