Cómo Gestionar tus Proyectos Python con pyenv y Poetry

Aprendiendo a gestionar tus proyectos Python de manera sencilla y práctica

Mario García
DotTech
9 min readJul 22, 2020

--

Photo by Chris Ried on Unsplash

Introducción

Tanto si tienes experiencia con Python como si acabas de empezar a aprender este lenguaje, en algún momento ocuparás paquetes de terceros para implementar alguna funcionalidad en el proyecto que estás desarrollando.

Cuando instalas Python, este viene acompañado de pip, un gestor de paquetes que tiene acceso al Python Package Index, abreviado como PyPi, donde están publicados la mayoría de paquetes de terceros disponibles para usarse con el lenguaje.

En distribuciones GNU/Linux, Python viene instalado por defecto, ya que algunas aplicaciones o elementos del escritorio se desarrollan con este lenguaje. Dependiendo del modelo de desarrollo y liberación de actualizaciones de la distribución, la versión de Python disponible puede ser 3.7 o 3.8; además, aunque la versión 2.7 dejó de tener soporte el 1 de enero de este año, algunas distribuciones aún incluyen esta versión.

Si pip no está disponible, puede instalarse desde los repositorios usando el gestor de paquetes, puede aparecer como python-pip o python3-pip, dependiendo del sistema operativo.

Si usas pip para gestionar las dependencias de tu proyecto, es probable que ocupes diferentes versiones de un mismo paquete para diferentes proyectos, y dado que se instalan en la misma ruta, Python no diferencia entre una versión y otra; además, pueden generarse conflictos entre dependencias.

Para resolver el problema descrito antes puedes combinar el uso de esta herramienta con la creación de entornos virtuales. De esa forma los paquetes que instales en el entorno virtual solo estarán disponibles para ese proyecto y no para todo el sistema.

Para crear entornos virtuales para proyectos Python instalamos el paquete virtualenv usando pip. Y para administrar esos entornos virtuales podemos usar virtualenvwrapper.

Demasiadas herramientas, ¿no? Además, no debemos olvidar que si queremos distribuir el código de nuestra aplicación desde un repositorio de Git o publicar en un servicio en la nube que soporte Python, hay que crear el archivo requirements.txt en donde se colocará la lista de dependencias del proyecto, para luego instalarlas ejecutando pip install -r requirements.txt.

¿Y si queremos usar una versión diferente de Python para cada proyecto? Existen herramientas como pyenv y Poetry que permiten gestionar las versiones de Python y las dependencias y entornos virtuales de cada proyecto de mejor manera, para que así no sea necesario instalar tantos paquetes. Y es sobre estas herramientas de lo que hablaré en este artículo.

pyenv

pyenv (github.com/pyenv/pyenv)

pyenv es una herramienta que permite instalar diferentes versiones de Python y cambiar entre ellas según los requerimientos del proyecto en el que se esté trabajando. Es un fork de rbenv y ruby-build que fue modificado para Python.

Para instalar pyenv puedes usar Homebrew en MacOS, ejecutando brew install pyenv. Si estás en Windows, pyenv no funciona fuera del Windows Subsystem for Linux, por lo que para instalar puedes usar pyenv-win, un fork de pyenv desarrollado por Kiran Kumar Kotari.

En Windows puedes instalar pyenv-win usando pip desde Git Bash o Powershell:

También puede instalarse usando Chocolatey:

En distribuciones GNU/Linux puedes instalar la herramienta desde los repositorios o a través del instalador automático. Pero antes debes asegurarte que las dependencias de pyenv estén instaladas en el sistema. En la wiki, en el repositorio oficial, hay una sección llamada Common build problems que contiene instrucciones para algunos sistemas operativos.

Dependencias

Debian/Ubuntu:

Fedora:

Centos:

Arch Linux y derivados:

Instalación

pyenv está disponible en los repositorios de Arch Linux y distribuciones basadas en este sistema, como Manjaro. Para otros sistemas operativos se debe usar el instalador automático.

Arch Linux y derivados:

Instalador automático:

Configuración

Después de instalarlo, pyenv agrega las siguientes líneas a tu bashrc:

  • export PATH="$HOME/.pyenv/bin:$PATH"
  • eval "$(pyenv init -)"
  • eval "$(pyenv virtualenv-init -)"

Ejecutando:

Para que los cambios surtan efecto en la terminal actual, ejecuta el siguiente comando:

Comandos básicos

Versión instalada de pyenv

Para conocer la versión instalada de pyenv ejecuta pyenv -v que mostrará lo siguiente:

Actualización de pyenv

Para actualizar a la última versión disponible, ejecuta pyenv update, si has realizado la instalación usando el instalador automático. En MacOs, ejecuta brew upgrade pyenv.

Si instalaste pyenv usando el gestor de paquetes de tu distribución, como en el caso de Arch Linux o distribuciones basadas en este sistema, puedes actualizar usando pacman cuando la actualización esté disponible en los repositorios.

En Windows puedes actualizar pyenv-win usando pip o Chocolatey, dependiendo de qué herramienta elegiste para instalar:

Gestionar versiones de Python instaladas

Versiones de Python

Ejecuta pyenv install --list o pyenv install -l para listar las versiones de Python disponibles para instalación; el comando mostrará los números de versión; además, puedes instalar otras implementaciones del lenguaje, como CPython, Jython, MicroPython, etc.

Ejecuta pyenv versions para conocer las versiones de Python instaladas en el sistema.

En principio solo estará disponible la versión de Python instalada por defecto en nuestro sistema. El * al inicio indica la versión que se está usando en el directorio actual, que también puede conocerse ejecutando:

Instalación

Cuando decidas qué versión de Python usarás en tu proyecto, puedes instalarla ejecutando pyenv install version. Por ejemplo, si necesitas la última versión de Python 3.7, debes ejecutar:

El comando anterior descargará e instalará la versión 3.7.7 del lenguaje, que estará disponible desde $(pyenv root)/versions.

Si necesitas pasar alguna opción de configuración a la instalación, puedes usar la variable de entorno CONFIGURE_OPTS. Por ejemplo, si necesitas instalar Python con la opción de bibliotecas compartidas activada, el comando deberá ejecutarse como:

Y actualizar la variable de entorno LD_LIBRARY_PATH:

Usando la versión de Python instalada

Para indicar que versión de Python se usará para el proyecto puedes ejecutar cualquiera de los siguientes comandos:

El primer comando le dice al sistema que la versión de Python que usaremos para el proyecto será 3.7.7 y que esa versión solo estará disponible en el directorio del proyecto.

El segundo comando indica al sistema que la versión que se usará en todo el sistema será 3.7.7 y que estará disponible en todos los directorios.

Desinstalación

Para desinstalar alguna de las versiones de Python instaladas con pyenv ejecutamos:

También podemos eliminar el directorio correspondiente en $(pyenv root)/versions. Si queremos conocer la ruta específica en el sistema donde se instaló la versión de Python que queremos eliminar, podemos ejecutar:

Podemospasar el resultado del comando anterior al comando rm como parámetro para eliminar el directorio.

Poetry

Poetry (python-poetry.org)

Poetry es una herramienta con la que puedes gestionar las dependencias de tu proyecto, ayudándote a instalarlas y mantenerlas actualizadas; además, te permite administrar el entorno virtual correspondiente.

Instalación

Para instalar Poetry en MacOS, distribuciones GNU/Linux y Windows (a través del Windows Subsystem for Linux) puedes ejecutar el siguiente comando, que descargará y ejecutará el script de Python get-poetry.py.

En algunos sistemas operativos como Arch Linux y distribuciones basadas en este, y Fedora, Poetry puede instalarse desde los repositorios.

Arch Linux y derivados:

Fedora (con yum o dnf):

Comandos básicos

Nuevo proyecto

Para crear un nuevo proyecto se ejecuta el siguiente comando:

El comando anterior creará un directorio con la siguiente estructura:

Para indicar las dependencias y versión de Python que se usarán en el proyecto, hay que editar el archivo pyproject.toml , del que hablaremos enseguida. Poetry lee este archivo para saber qué versión de Python se usará en el proyecto, configurar el entorno virtual correspondiente y descargar las dependencias.

Especificar dependencias

Para agregar las dependencias del proyecto hay que editar el archivo pyproject.toml, también pueden agregarse ejecutando el siguiente comando:

El comando anterior encontrará la versión adecuada de este paquete y lo instalará junto con las subdependencias correspondientes.

Para eliminar una dependencia puedes ejecutar:

Para especificar las dependencias también podemos editar el archivo pyproject.toml. Este archivo contiene lo siguiente:

En la línea python = "*" hay que indicar la versión de Python que se usará en el proyecto, aunque este valor lo obtiene del archivo .python-version que más adelante explicaré como configurar.

Debajo de esa línea se colocan las dependencias del proyecto, indicando la versión específica o usando el comodín * para decirle a Poetry que descargue la última versión disponible. Por ejemplo:

En el ejemplo anterior están las dependencias y subdependencias de un proyecto que ocupa la biblioteca de Firebase disponible en PyPi.

El archivo pyproject.toml también puede configurarse con la instrucción poetry init que, de forma interactiva, solicitará la información correspondiente al proyecto para configurar el archivo.

Instalación

Para instalar las dependencias del proyecto y configurar el entorno virtual correspondiente se ejecuta el comando poetry install.

Pero no hay que olvidar que debemos indicar que versión de Python se usará. Además, las versiones de Python disponibles en el sistema se están gestionando con pyenv.

En el directorio del proyecto se ejecuta el siguiente comando para indicar qué versión de Python se usará en ese directorio.

Enseguida, hay que decirle a Poetry qué versión de Python se usará para configurar el entorno virtual.

El comando anterior crea el archivo .python-version.

Después de configurar, se ejecuta el comando poetry install que creará el entorno virtual y descargará las dependencias del proyecto. Esta instrucción creará el archivo poetry.lock, que bloqueará las dependencias, para que cualquiera que use la aplicación o biblioteca siempre tenga las mismas versiones.

Para activar el entorno virtual y ejecutar instrucciones dentro de este, hay que ejecutar poetry shell.

También se pueden ejecutar comandos directamente dentro del entorno virtual; para ello, en la línea de comandos, escribe poetry run seguido de la instrucción.

Actualización de dependencias

Para obtener las últimas versiones de las dependencias y actualizar el archivo poetry.lock puedes ejecutar el comando:

Si necesitas actualizar solo algunas de las dependencias, puedes ejecutar el mismo comando de la siguiente forma:

Manejo de entornos virtuales

Si deseas obtener información del entorno virtual activado en ese momento, puedes usar el comando:

Que mostrará la siguiente información:

Si quieres obtener una lista de todos los entornos virtuales asociados con el entorno actual, ejecuta:

Que mostrará como salida lo siguiente:

Y si deseas cambiar entre una versión de Python u otra, escribe la siguiente instrucción en la línea de comandos:

Que genera el archivo .python-version que Poetry lee, para saber qué versión de Python usar para configurar el entorno.

Por último, si quieres eliminar un entorno virtual existente, ejecuta el comando:

Conclusión

En este artículo hemos visto cómo el usar herramientas como pyenv y Poetry puede ayudarnos a gestionar los proyectos que desarrollemos con Python. Hemos tratado los puntos clave de ambas herramientas, desde de la instalación en diferentes sistemas operativos, hasta los comandos básicos que debemos conocer.

Si te ha gustado el artículo, ¡No dudes en darle un aplauso y dejar un comentario!

--

--

Mario García
DotTech

Free Software Enthusiast, Speaker, #Mozillian, #Rustacean, #geek, #WebDeveloper