/ Python

Pipenv: El Administrador de paquetes de Python

Pipenv una herramienta para la producción que su objetivo es llevar lo mejor de todos los mundos de empaquetado a Python. Utiliza Pipfile, pip y virtualenv, en un solo comando.

Administrando tus dependencias:

Una vez que tu código comienza a usar código de otros proyectos, es hora de comenzar a administrar tus dependencias. A veces puede ser un desafío.

Por lo que en este artículo veremos como trabajar con pipenv una herramienta realmente nueva y buena, cuando comenzamos en python empezamos escribiendo nuestro propio código y esto es genial, y cómodo porque nosotros mismos nos entendemos muy bien, pero llega el momento de tener que usar el código de otro programador, para ahorrar tiempo y no re-inventar la rueda, estos paquetes ya creados por otros se les llama dependencias.

Cuántas personas han intentado resolver problemas con fechas y horas? Cuántas personas hay creado autenticación con redes sociales, ya hay paquetes listos para este tipo de cosas, por lo cual no es necesario crear una solución para el mimso problema que alguien más ya solucionó.

PIP es el administrador de dependencias, historicamente usado por python, y es una gran herramienta pero tiene ciertos problemas, como que el paquete A dependa de un subpaquete del paquete B en otro proyecto, y a la hora de actualizar paquete B se pierde la funcionalidad de paquete A, lo que haría que pierdas más tiempo solucionando este problema que el proyecto.

Una solución para detener esta dependencia entremezclada es un entorno virtual. Virtualenv es una herramienta popular que nos permite tener mundos separados de paquetes.

La forma más común de instalar estos paquetes es con una herramienta conocida como Pip. Python instala paquetes, normalmente, cuando instala algo con Pip, se instala en un repositorio global de bibliotecas, generalmente llamado paquetes de sitio.

Pero, ¿y si creas un proyecto con Django 1.8 y tu próximo proyecto es con Django 1.9? Debería asegurarse de que su proyecto 1.8 aún funcione con 1.9 una vez que se haya actualizado, para el mejor de los mundos, puede usar Virtualenv para cada proyecto, e instalar todo lo que el proyecto necesite.

Virtaulenv mantiene las cosas fuera del repositorio global, y en el propio repositorio de paquetes de un proyecto, aquí es donde entra Pipenv.
La administración de paquetes es común en muchos lenguajes de programación, es posible que haya oído hablar de herramientas similares de administración de dependencias como npm, Bundler, Yarn, Gradle u otros.

Pipenv pretende reunir lo mejor de todo esto y Pip en un solo lugar,
con las características adicionales de los entornos virtuales también está destinado a ser un método fácil de configurar un entorno de trabajo,
veámoslo en acción y analicemos algunas de las características de este asistente de flujo de trabajo.

Te presento a pipenv:

Comencemos por echar un vistazo a cómo instalar y configurar un entorno pipenv.

Lo primero que tenemos que hacer es escribir en consola el siguiente comando sudo python -m pip install pipenv para instalarlo, ¡listo ya lo tenemos instalado!

Ahora supongamos que queremos instalar el paquete request solo hacemos lo siguiente: pipenv install request y pipenv hará varias cosas por nosotros que son lo situiente.

  • Creó un entorno virtual dentro de nuestro directorio.
  • Creó un pipfile para nuestro uso.
  • bloqueó las dependencias en un archivo llamado pipfile.lock.

Supongamos que queremos instalar matplotlib en su versión 2.2 hacemos lo siguiente pipenv install matplotlib==2.2.2, e instalará este paquete en la versión especificada.

Ahora supongamos que queremos instalar otro paquete en modo de desarrollo(dev), hacemos lo siguiente pipenv install pytest --dev, veremos que pytest ha sido agregado al lock, en el área de desarrollo (dev-packages).

Vamos ha hacer un pequeño script con request dentro de nuestro entorno virtual, para esto creamos un archivo llamado test.py y lo habrimos en nuestro editor de texto favorito, y pegamos el siguiente código:

import request

response = request.get("https://hackemate.ninja")

print("el estado de respuesta es: {}".format(str(response.status_code)))

Esto que acabamos de hacer es una petición simple con el paquete que instalamos en nuestro entorno virtual, ahora para correrlo hacemos lo siguiente: pipenv run test.py y este se encargará de correr el script con todos los paquetes necesarios para hacerlo.

Pipfile & Pipfile.lock:

Pipenv crea un par de archivos que administran nuestras dependencias de desarrollo y producción, Pipfile y Pipfile.lock.

Vamos a empezar por pipfile, puedes abrir el archivo con tu editor de texto favorito, el formato de este archivo es TOML, que es un acrónimo de Tom´s Obvious Minimal Language.

El archivo está separado en secciones, designadas por corchetes, tenemos la sección fuente, que le dice a pipenv dónde obtener los archivos, la sección de paquetes para los paquetes requeridos para el proyecto, vemos los dos paquetes que hemos instalado, lo siguiente es la sección dev-packages para los paquetes de desarrollo solamente.

Finalmente, tenemos una sección de requisitos (requires), que tiene cosas como una versión python específica.

La intención de este Pipfile es reemplazar el archivo requirements.txt que encontramos cuando usamos pip, y es el almacén de referencia de dependencia o nuestro proyecto.

Tenga en cuenta que no hay subdependencias aquí, pipenv solo incluirá los paquetes que necesitan importarse, así que maneja nuestros subpaquetes por apartem, porque es muy limpio cuando trabaja.

Echemos un vistazo a Pipfile.lock, este archivo se genera de manera predeterminada con hashes SHA-256 de cada paquete descargado, esto garantiza que la instalación será la que deseamos instalar, incluso en redes comprometidas o que no son de confianza.

La seguridad siempre es una consideración importante, y pipenv lo tiene incorporado, esto hace que los paquetes que queremos instalados sean los verdaderos paquetes verificados,

Si nos desplazamos a través de este archivo, veremos que aquí es donde se manejan todas nuestras subdependencias, este archivo Pipfile.lock no debe editarse manualmente, y está destinado a ser utilizado en producción.

¿Cómo nos aseguramos de que nuestra versión de producción esté actualizada? Ejecutamos el comando pipenv lock, colocaré una pequeña lista de comandos que nos ayudan con el archivo lock:

  • pipenv lock = crea el archivo lock si es que faltara y actualiza nuestra versión de producción.
  • pipenv install --ignore-pipfile = Esto ignora el archivo pipfile e instala solo lo que tiene el archivo lock. Esto hará que nuestro entorno de desarrollo sea el mismo que el de producción.

Gráficos de dependencia:

¿Necesita saber qué paquete depende de otro? Pipenv tiene una característica gráfica conveniente para hacer precisamente eso.

Es super fácil sólo escribe este comando en consola pipenv graph y generará una lista de los paquetes y de que otros paquetes dependen, si quisieramos las gráficas en archivos json escribimos el siguiente comando, pipenv graph --json y si escribimos este comando, pipenv graph --reverse, esto nos mostrará los subpaquetes de primero y su relación.

Finalmente, hay un control de seguridad incorporado que prueba contra PEP 508 solo tienes que escribir el siguiente comando, pipenv check y si todo sale correcto, tienes un proyecto y sus dependencias bien administradas.

si quieres leer aprender otros conceptos te dejo estos dos link de complemento sería bueno que los leyeras.

PEP 508
Managing dependencies

¿Aún crees que la universidad es buena opción para estudiar? Compara con Teamtreehouse → ¡haciendo clic aquí!

Orlando Morales

Orlando Morales

Arquitecto web, Data scientist freelance y amante de las Artes Marciales, me encanta siempre aprender, emprender y luchar por mejorar mi estilo de vida mientras disfruto de lo que hago.

Leer más