Cómo administrar proyectos de Python con Pipenv

El ecosistema de paquetes de Python le permite aprovechar el trabajo de millones de otros desarrolladores con un simple pip installcomando. Los entornos virtuales de Python le permiten aislar proyectos y sus paquetes entre sí.

Pero hacer malabares con los entornos y los paquetes por separado puede resultar complicado. Doblemente si sus proyectos tienen requisitos de paquete específicos y desea centrarse en el desarrollo en lugar del mantenimiento. Lo que necesitamos es una forma de gestionar entornos y paquetes juntos. 

Pipenv convierte la gestión de entornos virtuales de Python y paquetes de Python en una sola herramienta. Pipenv asegura que cada proyecto use la versión correcta de cada paquete que necesita y que cada uno de esos paquetes también tenga las dependencias correctas.

Además, Pipenv genera una lista de las dependencias de su proyecto que pueden viajar con él, lo que permite a otros usuarios o desarrolladores configurar el mismo proyecto de la misma manera. Otros usuarios también necesitarán instalar Pipenv para configurar correctamente un proyecto administrado por Pipenv, pero afortunadamente, instalar y usar Pipenv es muy sencillo. 

Cómo funciona Pipenv

Por lo general, cuando crea un proyecto Python y usa un entorno virtual para sus paquetes, tiene la tarea de crear el entorno virtual usted mismo (usando el comando  py -m venv), instalar dependencias en él y rastrear las dependencias manualmente.

Pipenv proporciona una forma de hacer todo esto de forma semiautomática. El entorno virtual de su proyecto se crea y administra automáticamente cuando instala paquetes a través de la interfaz de línea de comandos de Pipenv. Las dependencias se rastrean y bloquean, y puede administrar las dependencias de desarrollo y tiempo de ejecución por separado. También puede migrar desde requirements.txtarchivos existentes de la vieja escuela , por lo que no necesita desgarrar su proyecto y comenzar desde cero para usar Pipenv bien.

Tenga en cuenta que, a diferencia de otras herramientas de gestión de proyectos de Python (como Poetry), Pipenv no gestiona el "andamiaje" de su proyecto. Es decir, Pipenv no crea la estructura interna del directorio del proyecto con pruebas simuladas, códigos auxiliares de documentación, etc., sino que se centra principalmente en la gestión de paquetes y entornos. Esto hace que Pipenv sea una buena opción si solo desea una herramienta que se centre en entornos y paquetes virtuales, y no una solución todo en uno.

Empiece con Pipenv

Pipenv instala de la misma manera que la mayoría de cualquier otro paquete de Python: pip install --user pipenv. Se --userrecomienda la opción para evitar que Pipenv entre en conflicto con otros paquetes de todo el sistema. También debe agregar la ruta al directorio binario base del usuario a la ruta del sistema, de modo que los comandos de Pipenv se enruten al lugar correcto.

Si planea hacer de Pipenv una parte consistente de su flujo de trabajo, también es una buena idea mantener su instalación subyacente de Python lo más mínima posible. Ese consejo se aplica a la mayoría de las instalaciones de Python que utilizan entornos virtuales.

Configurar un nuevo proyecto con Pipenv

Para comenzar un proyecto completamente nuevo con Pipenv, simplemente cree un directorio y complételo con los archivos que normalmente crearía para un proyecto. Si tiende a aplicar scaffolding a un proyecto a medida que avanza, puede comenzar con un directorio vacío.

La instalación de paquetes para un proyecto no es apreciablemente diferente con Pipenv que con Pip; de hecho, la sintaxis es muy parecida. Abra una consola en el directorio de su proyecto y escriba pipenv install para instalar un paquete para el proyecto. Para especificar que el paquete está en desarrollo , use la -dbandera. Puede utilizar la pip sintaxis para indicar una versión específica de un paquete (por ejemplo, black==13.0b1).

Cuando instala un paquete con Pipenv, suceden dos cosas. Primero, Pipenv comprobará si ya se ha creado un entorno virtual para este directorio de proyecto. Si es así, Pipenv instalará el paquete en el entorno virtual existente. Si no, Pipenv creará un entorno virtual que usa la misma edición de Python que se usó para ejecutar Pipenv. Tenga en cuenta que el entorno virtual no se crea en el directorio del proyecto en sí; se crea en un directorio administrado por Pipenv en su perfil de usuario.

En segundo lugar, Pipenv instalará los paquetes solicitados en el entorno virtual. Cuando finalice la instalación, Pipenv informará sobre todo lo que hizo, incluida una ruta al entorno virtual si tuviera que crear uno.

Por lo general, no es necesario conocer la ruta al entorno virtual que crea Pipenv. Para activar el entorno, simplemente navegue hasta el directorio de su proyecto y use  pipenv shellpara iniciar una nueva sesión de shell o use  pipenv run para ejecutar un comando directamente. Por ejemplo, utilice  pipenv run mypypara ejecutar la versión de la herramienta de línea de comandos de mypy(asumiendo que la mypyherramienta se instaló en el entorno virtual), o pipenv run python -m para ejecutar un módulo de Python disponible en el entorno virtual.

Pipenv y lockfiles

Eche un vistazo al directorio después de haber instalado paquetes con Pipenv y verá dos archivos Pipfiley Pipfile.lock. Ambos son generados automáticamente por Pipenv y no deben editarse directamente, ya que describen el estado de los paquetes en el proyecto.

Pipfilees el más simple de los dos. Simplemente enumera los paquetes necesarios para el proyecto, desde dónde se instalan (el valor predeterminado es PyPI) y qué versión de Python se necesita para ejecutar todo. Pipfile.lockes más complejo. Enumera cada paquete junto con los detalles de la versión y los hash SHA-256 generados a partir del paquete. Los hash se utilizan para garantizar que los paquetes instalados coincidan exactamente con lo especificado, no solo el número de versión, sino también el contenido obtenido.

Cuando trabaje en un proyecto que usa Pipenv para la administración de paquetes, querrá agregar los archivos Pipfiley Pipfile.lockal repositorio de control de versiones del proyecto. Cualquier cambio realizado en los paquetes de su proyecto, a su vez, alterará esos archivos, por lo que esos cambios deben ser rastreados y versionados.

Utilice un proyecto de Pipenv

Si descarga un repositorio de origen para un proyecto que usa Pipenv para la administración de paquetes, todo lo que necesita hacer es descomprimir el contenido del repositorio en un directorio y ejecutarlo pipenv install(no se necesitan nombres de paquetes). Pipenv leerá los archivos Pipfiley Pipfile.lockdel proyecto, creará el entorno virtual e instalará todas las dependencias según sea necesario.

Finalmente, si desea usar Pipenv para administrar un proyecto que actualmente usa un requirements.txtarchivo, simplemente navegue hasta el directorio del proyecto y ejecute pipenv install. Pipenv detectará el  requirements.txt(o puede usar el -rindicador para señalarlo) y migrará todos los requisitos a un Pipfile.