Gestión de versiones de Python con Pipenv

0
159

En este tutorial veremos cómo gestionar tu entorno local para utilizar múltiples versiones de Python.

Índice de contenidos

  1. Introducción
  2. Gestión de versiones
    2.1 No tocar la instalación de Python del sistema operativo
    2.2 Instalar la última versión de Python con HomeBrew
    2.3 Hacer uso de los entornos virtuales de Python
    2.3.1 Virtualenv
    2.3.2 Pipenv
  3. Conclusión
  4. Referencias

1. Introducción

Gestionar diferentes proyectos en local puede ocasionar que descuidemos nuestro entorno local de forma que no sepamos qué versión tenemos de una determinada herramienta.

Esto es algo que a mi me ha pasado con Python, y quería compartir una solución para gestionar versiones en varios proyectos.

2. Gestión de versiones

El proceso que he seguido para dejar un entorno local limpio en el que pueda instalar diferentes versiones de Python por proyecto pasa por:

  • No tocar la instalación de Python del sistema operativo.
  • Instalar la última versión de Python con HomeBrew.
  • Hacer uso de los entornos virtuales de Python.

A continuación explicaremos cada uno de estos puntos en detalle 😀

2.1 No tocar la instalación de Python del sistema operativo

En MacOS, Python viene instalado por defecto. Este binario está localizado en /usr/bin.

Yo prefiero no utilizarlo ya que:

  • Es el binario que viene instalado con el sistema, por lo que cambiar las versiones que pueda gestionar quizá puede tener efectos no deseados.
  • En general me gusta tener entornos que son replicables, y esto incluye nuestro entorno local. Al instalar Python por ti mismo, puedes hacerlo en un script pudiendo replicar tu entorno local de forma sencilla, dándote control también de la versión de Python que quieres usar.

2.2 Instalar la última versión de Python con HomeBrew

Por los motivos dichos anteriormente, procederemos a instalar Python, para lo cual utilizaremos el gestor de paquetes de HomeBrew. Mi compañero David ha escrito un tutorial sobre él que os dejo aquí en el que explica su uso e instalación.

Instalación

Para instalar Python con Homebrew ejecutamos:

Esto nos instalará la última versión de Python disponible en el gestor de paquetes.
Esta instalación nos habrá generado el enlace simbólico al binario python3 en /usr/local/bin haciendo referencia al Python instalado por HomeBrew.

Como vemos, HomeBrew instala Python de forma que no entra en conflicto con el Python del sistema. A parte del propio Python, también nos instala ciertas utilidades como el gestor de paquetes de Python: PIP.

2.3 Hacer uso de los entornos virtuales de Python

Para usar los entornos virtuales de Python, tenemos varias alternativas, de las cuales veremos dos en este tutorial.

2.3.1 Virtualenv

Todas las alternativas están basadas en virtualenv, una herramienta para crear entornos aislados de Python. Funciona creando un directorio en el cual añade todos los ejecutables necesarios para usar los paquetes que puede necesitar un proyecto de Python.

Gracias a esta herramienta, podremos crear un entorno virtual para cada uno de los proyectos que tengamos de forma que las dependencias entre proyectos quedan aisladas en cada uno.

Para instalar virtualenv en nuestro entorno, basta con usar nuestro recién instalado pip y ejecutar:

Comprobamos que está instalado ejecutando:

Para usarlo, basta con ejecutar:

Esto nos creará un directorio venv-2.7 en el que estarán todos los ejecutables necesarios. En este caso estamos instalando la versión de Python 2.7

Por último, para usar nuestro entorno virtual ejecutamos:

El nombre del entorno virtual aparecerá ahora en la parte izquierda del prompt del sistema. En nuestro caso tendría esta pinta:

Podemos ahora por ejemplo, instalar Ansible con pip ejecutando:

Ya que ahora tanto el comando python como pip hacen referencia a las versiones del entorno virtual. Esto podemos comprobarlo con el comando which pip en el que vemos que la ruta de ambos binarios no es la del sistema por defecto, sino la del directorio que acabamos de crear.

Cuando quieres salir del entorno virtual, ejecutamos:

Si quieres eliminar este entorno virtual, basta con eliminar el directorio que contiene el entorno virtual.

Sin embargo este proceso tiene varios inconvenientes:

  • Crear un entorno virtual es tedioso cuando llevas muchos.
  • Tienes que recordar dónde has creado el entorno virtual para un proyecto específico. En principio puedes optar por dejarlo en el raíz del proyecto de git que estés usando, ignorando el directorio en tu .gitignore pero esto hace que si eliminas repositorio tengas que volver a crear el entorno virtual, reinstalando todas las dependencias del mismo.

Para solucionar estos problemas usaremos pipenv, un paquete que te facilita el uso de entornos virtuales de Python.

2.3.2 Pipenv

Pipenv es una herramienta que nos permitirá facilitar el uso de los entornos virtuales. Vamos a ver cómo sería el flujo anterior y qué ventajas aporta.

La instalación es tan sencilla como la anterior, ejecutando:

Si después de la instalación comprobamos con pip3 list veremos que hemos instalado los paquetes pipenv, virtualenv, virtualenv-clone y certifi, con lo que confirmamos que lo que hace es basarse en virtualenv pero haciéndonos la vida un poco más sencilla.

Si queremos, como en el caso anterior, instalar Ansible con Python, accedemos al repositorio donde quieres tener tu entorno virtual y ejecutamos el comando:

Este comando ejecutará:

  • Creación de un virtualenv: Al final necesitamos crear este entorno virtual para usar la versión de Python deseada (por defecto la última), pero este pasará a estar gestionado por el propio pipenv, y creado en el directorio ~/.local.
  • Creación de un Pipfile: Este Pipfile es el fichero encargado de gestionar todas las dependencias de este repositorio, por lo que no necesitas generar después este fichero con pip freeze > requirements.txt ya que por instalar utilizando pipenv él se encarga de actualizarlo.
  • Instalación del paquete: en este caso Ansible.
  • Actualización de pipfile.

Y eso es todo.

Si ahora quisiéramos usar nuestra versión de Ansible instalada, necesitaríamos activar nuestro entorno virtual. Para esto ejecutamos el comando pipenv shell el cual nos activará el entorno virtual.

Para salir del entorno virtual basta con salir de esa shell con el comando exit.

Si quieres eliminar el entorno virtual, basta con ejecutar pipenv –rm en el directorio del proyecto. Este comando no eliminará tu Pipfile por lo que todavía tendrás el listado de dependencias necesarias para tu proyecto.

Las ventajas para usar pipenv son:

  • Te desentiendes de la gestión de entornos virtuales, y de la localización del mismo.
  • Te genera automaticamente un fichero para gestionar las dependencias de Python por proyecto.
  • Todo se hace con el mismo comando, el cual tiene un gran menú de ayuda pipenv –help. Ya no tienes que recordar comandos distintos para crear el entorno (virtualenv), habilitarlo (source), gestionar dependencias (pip) y salir del entorno (deactivate).

Conclusión

Al final tu entorno local queda más limpio y sin arrastrar configuración de versiones de python y paquetes de otros proyectos siguiendo este alcance en el que para resumir:

  • No utilizamos Python que nos provee el sistema por defecto.
  • Instalamos Python usando el gestor de paquetes de HomeBrew.
  • En este Python para uso local lo único que instalamos es pipenv, para poder gestionar los diferentes proyectos.
  • Toda la configuración relativa a un proyecto determinado irá dentro de su respectivo entorno virtual, que a su vez nos dejará un registro de qué dependencias y con qué versiones están instalados en cada uno, de forma que facilita la réplica del entorno si el proyecto es colaborativo.

4. Referencias

Dejar respuesta

Please enter your comment!
Please enter your name here