Más allá de virtualenv: pyenv, pipsi y pipenv

Suelo tener algunos problemas con los entornos virtuales, como ya he contado en alguna ocasión. Recientemente he decubierto dos herramientas, pyenv, pipsi y pipenv, que me facilitan trabajar con diferentes versiones de Python y me evitan algunos de los promeblas citados.

pyenv

pyenv me permite tener diferentes versiones instaladas en el equipo, separadas de la versión del sistema operativo. Además se combina perfectamente con pipenv permitiendome asignar una versión de Python a cada proyecto.

Para instalar pyenv en Linux podemos usar este instalador, y si no eres muy fan del método siempre puedes instalarlo siguiendo los pasos en su repositorio. En macOS es mucho más sencillo, basta con:

~$ brew install pyenv

Además hay que añadir las siguientes líneas al .zshrc o al .bashrc, segun vuestro shell:

export PATH=”/Users/jorge/.pyenv:$PATH” eval “$(pyenv init -)“

Instalar una versión nueva de Python con pyenv es tan fácil como:

~$ pyenv install 3.6.4 ~$ pyenv install 3.5.4 ~$ pyenv install 2.7.14 ~$ pyenv install pypy3.5-5.10.0

Y para cambiar entre las diferentes versiones de Python:

~$ pyenv global 3.6.4

También puedo instalar un versión por proyecto, que se guardará en un archivo .python-version:

~$ pyenv local 2.7.14

pipsi

pipsi permite instalar herramientas CLI basadas en Python aisladas de la versión de Python del sistema operativo, evitando así problemas con sus dependencias. Para instalar pipsi solo hay que seguir los pasos descritos en su repositorio (descargando el script y ejecutandolo después de inspeccionarlo 🙃 mejor).

Y ahora explico para que la instalo…

pipenv

pipenv sirve para instalar las dependencias de un proyecto, parecido al virtualenv pero de forma más intuitiva. Para instalarlo:

~$ pipsi install pew pipenv

Nota: Al parecer es necesario añadir las siguientes líneas a .zshrc o .bashrc en macOS debido a un bug:

export LANG=en_US.UTF-8 export LC_ALL=en_US.UTF-8

He elegido en_US.UTF-8 por ser el lenguaje de mi instalación. En caso de otro idioma cambiar en concordancia.

Al instalar un módulo con pipenv install se crea un archivo Pipfile donde se guardarán todas dependencias y sus versiones. Si tenemos instalado pyenv podemos incluir la versión que necesitemos al Pipfile:

[requires] python_version = “versión"

De esta forma al compartir el proyecto, o al trabajar en otro equipo, podremos recuperar tanto sus dependencias como la versión de Python con un simple:

~$ pipenv install

En el caso de necesitar instalar las dependencias desde un requirements.txt o crear un archivo de estos por necesidades del guión:

~$ pipenv install -r requirements.txt ~$ pipenv lock –requirements » requirements.txt

Hay un montón de opciones para jugar con el Pipfile incluidas en su repositorio.