Trabajar con múltiples versiones de Python

24-10-2022

Por Kevin Hierro Carrasco

He visto últimamente lo complicado que se hace trabajar adecuadamente con multiples repositorios o diferentes versiones de Python usando pipenv.

Por eso he creado esta guía de Python usando pyenv y pipenv, los cuales sirven para tener un mayor control tanto de la versión cómo de las dependencias evitando errores, en este caso Ubuntu 22.04 con zsh.

¿Cómo funciona?

Toda la gestión de versiones de Python es gestionada usando pyenv, mientras que pip el gestor de dependencias para el entorno global de la versión de Python. Asegurándonos siempre primero de mirar la versión python -V, vamos a instalar y pipenv que sería un gestor de entornos con dependencias, sirve para instalar las cosas en el entorno en vez del entorno global y que las dependencias no se choquen.

En la documentación de los repositorios hay más información para otras versiones.

Pyenv

Lo primero a instalar es pyenv, idea usando el siguiente comando

git clone https://github.com/pyenv/pyenv.git ~/.pyenv

Una vez clonado lo siguiente es añadir el comando a zsh

echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.zshrc echo 'command -v pyenv >/dev/null || export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.zshrc echo 'eval "$(pyenv init -)"' >> ~/.zshrc

Actualizamos el fichero ~/.zshrc

source ~/.zshrc

Ahora claro ya lo tenemos, si el proyecto nos requiere python 3.7, por ejemplo, vamos a instalarlo, pero antes tenemos que instalar las dependencias de Python.

sudo apt-get update; sudo apt-get install make build-essential libssl-dev zlib1g-dev \ libbz2-dev libreadline-dev libsqlite3-dev wget curl llvm \ libncursesw5-dev xz-utils tk-dev libxml2-dev libxmlsec1-dev libffi-dev liblzma-dev
pyenv install 3.7.15

Ahora ya podemos mirar si ha cambiado la versión, si anteriormente no tenías python pone esta versión como global, pero si ya había uno no la cambia.

python3 --version
Python 3.7.15

Perfecto ya tenemos la versión que necesitamos, en caso de querer cambiarla según el ámbito y que no sea global, dejo el link a la documentación.

🚨 Cuidado con cambiar la version global, otros programas del sistema pueden estar utilizándola.

Pipenv

Si acabas de instanciar la versión hay que instalar pip y pipenv para poder usarlo.

python -m pip install -U pip
pip install pipenv

Finalmente dentro de la proyecto desde la terminal a la misma altura que el Pipfile(fichero que contiene las dependencias) instalamos sus dependencias y se creará un entorno con el nombre del proyecto al ejecutar...

pipenv install --dev

Nota si ya tenias un entorno de pipenv creado anteriormente, recomiendo borrarlo y volver a instalar.

Gracias por llegar hasta aquí, espero que todo vaya bien y a darle Python