El ingeniero de software Jordan Mora nos presenta Python Poetry y su implementación para una gestión de dependencias cómoda y relajada.
¿Alguna vez se unió a un nuevo proyecto de Python o revisó uno antiguo y, mientras configuraba su entorno, comenzó a recibir esos mensajes de " no se puede instalar la dependencia "? Entonces revisó el archivo de requisitos y descubrió que la dependencia infractora no tiene una versión fijada o, peor aún, ni siquiera existe. Bueno, no estás solo; Me pasó una o dos veces.
Cuando esto sucede, la mejor solución siempre es:
- Consulta la versión con otro compañero de trabajo.
- Agréguelo al archivo de requisitos
- Ejecute el proceso de instalación nuevamente
- Espero que esto no pase con la próxima dependencia.
- Repetir
Puedes ver que es muy reactivo porque no impide que vuelva a suceder y tarde o temprano sucederá. Ese pensamiento permaneció en mi cabeza. ¿Existe una solución a este problema común? ¿Algo así como npm para proyectos front-end?
la vieja manera
La forma habitual de instalar dependencias en un proyecto de Python es mediante pip . Con pip, agrega una dependencia con pip install, necesita ejecutar pip install -r requisitos.txt para instalarlos.
El problema con este enfoque es que cuando las dependencias también tienen subdependencias, es posible que no siempre obtenga la misma versión porque no están especificadas en el archivo requisitos.txt. Otro problema con este proceso es que es posible que olvide agregar la dependencia al archivo de requisitos. Aquí es donde entra en juego Python Poetry .
¿Qué hace que la poesía de Python sea atractiva?
Poetry utiliza un archivo TOML en lugar de un archivo de texto para rastrear dependencias y un archivo de bloqueo para rastrear dependencias y subdependencias. Cada vez que se instalan dependencias del proyecto, siempre obtendrá las mismas versiones del archivo de bloqueo. La poesía va más allá y también guarda el hash de un paquete, ya que algunos mantenedores pueden actualizar el paquete sin cambiar la versión.
Poetry viene con una CLI conveniente para instalar dependencias, por lo que pip ya no es necesario. Al instalar dependencias, estas se agregan automáticamente al archivo TOML, evitando la terrible tarea de recordar los paquetes agregados al proyecto.
Python Poetry refuerza el uso de entornos virtuales. Si aún no está utilizando uno, crea un nuevo entorno virtual para aislar las dependencias entre diferentes proyectos. Si está utilizando Docker, puede desactivar esta función, ya que no tiene sentido utilizar entornos virtuales dentro de contenedores.
A diferencia de la forma anterior, Poetry le brinda la posibilidad de actualizar todos sus paquetes y, según la especificación de dependencia que esté utilizando, puede ser un parche o una actualización menor (se recomienda una búsqueda exhaustiva para actualizaciones más importantes).
La especificación de dependencia se refiere a la restricción de versión que aplica a sus dependencias. Puede utilizar restricciones de cursor, tilde o comodines, o incluso especificar un rango de versiones aceptables. También puedes usar git, ruta y URL, y dependencias de origen.
Otra característica interesante de Poetry es que cuando eliminas una dependencia que ya no necesitas, también elimina sus subdependencias, lo que no es el caso con pip. Esto evitará dependencias huérfanas en su entorno.
Finalmente, Poetry le brinda la capacidad de separar las dependencias principales, aquellas que necesita para que su proyecto funcione, de las dependencias de desarrollo, que se utilizan principalmente con fines de depuración. Esto da como resultado un entorno de producción libre de dependencias innecesarias.
Debo señalar que Poetry también es capaz de empaquetar y publicar bibliotecas, pero solo me centraré en la gestión de dependencias.
Componiendo tu primer poema
No hay mejor manera de entender algo que verlo usted mismo, por lo que seguiremos un breve tutorial sobre cómo migrar un proyecto existente a Python Poetry. Supongo que ya has instalado Python versión 3.7+ y git. Si te sientes aventurero, puedes usar un proyecto que tengas o en el que estés trabajando, pero te proporcionaré una maqueta del proyecto Django para este tutorial. La versión de Python Poetry al momento de escribir este artículo es 1.3.1.
En primer lugar, puedes instalar Python Poetry ejecutando el comando:
rizo -sSL python3-
Puede comprobar si Poetry se instaló correctamente ejecutando poesía –version. También puede ejecutar Poetry List para mostrar la lista de comandos disponibles.
A continuación, vaya a este repositorio de demostración de GitHub y clónelo en su máquina local; es solo un proyecto Django vacío con un archivo require.txt.
Ahora que tenemos el escenario listo, procedamos con la migración.
Inicializando la poesía
El primer paso es inicializar Python Poetry en su proyecto, así que continúe y ejecute la poesía inicial dentro del repositorio. Aparecerá un mensaje interactivo para configurar el archivo TOML. Puede utilizar las sugerencias predeterminadas, pero asegúrese de que su versión de Python coincida con el campo Versión de Python compatible. Cuando llegue a " ¿Le gustaría definir sus dependencias principales de forma interactiva?" ”, simplemente envíe “ no. ” Luego le preguntará si desea definir sus dependencias de desarrollo de forma interactiva; nuevamente, escriba “ no”. ”Finalmente, se le pedirá que confirme su configuración; enviar “ sí. "
Migrando tus dependencias
Como ya tienes un archivo require.txt, la forma más sencilla de migrar tus dependencias es ejecutando el comando:
requisitos de gato.txt xargs poesía agregar
Poetry agregará cada dependencia al archivo TOML e intentará resolver cualquier conflicto, luego escribirá en el archivo de bloqueo. Si no está utilizando un entorno virtual, las dependencias se instalarán en un entorno virtual recién creado.
Ahora que Poetry tiene todas sus dependencias en su lista, puede comprobarlo ejecutando Poetry Show.
Como el archivo requisitos.txt ya no es necesario, puedes deshacerte de él.
Limpiar subdependencias
Dado que probablemente tenga subdependencias enumeradas como dependencias principales, podemos deshacernos de ellas. Cuando desee actualizar dependencias de alto nivel, no habrá restricciones.
Ejecute el comando:
espectáculo de poesía --árbol
Y verás cuáles son las subdependencias.
Hacer que las dependencias sean actualizables
El último paso es hacer que sus dependencias sean actualizables. Personalmente, sólo uso actualizaciones de parches, ya que suelen ser correcciones y parches de seguridad. Hago actualizaciones menores y mayores solo después de leer los registros de cambios y asegurarme de que es algo que queremos agregar al proyecto.
Puede utilizar la especificación de dependencia (mencionada anteriormente en el artículo) que más le convenga. Puede abrir el archivo TOML nuevamente y editar la versión de cada dependencia agregando la restricción de versión (tilde, cursor, comodín, etc.) al número de versión. En mi caso, utilicé restricciones de tilde.
Ahora, las dependencias de Django y Djangorestframework se pueden parchear. La próxima vez que se publique una actualización para cualquiera de estas dependencias, podrá actualizarlas con el comando:
actualización de poesía
Esto intentará actualizar todas las dependencias. También puede especificar las dependencias que desea actualizar. Si se encuentran actualizaciones, Poetry resuelve los conflictos de dependencia y realiza la actualización. Después de eso, actualizará el archivo de bloqueo.
En este caso, si ejecuta la actualización y, suponiendo que haya realizado los mismos cambios que yo, verá que Djangorestframework se actualizará de la versión 3.10.0 a la 3.10.3, que es el último parche al momento de escribir este artículo. .
Puede consultar el producto final aquí en la rama migrada del repositorio .
Próximos pasos
De ahora en adelante, puedes usar Poetry para agregar y eliminar dependencias hacia y desde tu proyecto, simplemente usando la CLI. Si actualiza fuera de sus restricciones, deberá ejecutar el comando agregar con la nueva versión.
Para los principiantes en el proyecto, obtener exactamente las mismas versiones de paquete que la última persona que actualizó el archivo de bloqueo es tan fácil como ejecutar la instalación de poesía.
Conclusión
Similar a npm, Python Poetry es una potente herramienta de gestión de dependencias que resuelve muchos de los problemas presentes al utilizar el archivo requisitos.txt junto con pip. También aporta más funcionalidad y la CLI es muy fácil de usar. Se puede aplicar a proyectos Python nuevos y existentes, lo que facilita agregar, eliminar y actualizar dependencias a medida que evoluciona el proyecto.
Espero que esta herramienta se pueda utilizar en muchos proyectos en el futuro. Ha demostrado ser una de las mejores herramientas que he usado para ayudarme a mí y a mi equipo a mantener un proyecto actualizado sin que se convierta en una tarea complicada.
Si está interesado en aprender más sobre Python Poetry, consulte la documentación siguiendo este enlace .
Si le gustó este artículo, consulte uno de nuestros otros artículos sobre Python.
- Los 8 mejores marcos GUI de Python
- Las 8 mejores bibliotecas de Python para ciencia de datos
- Las mejores bibliotecas de Python para desarrolladores modernos
- Las 8 mejores bibliotecas de análisis de sentimientos en Python
- Las 4 mejores bibliotecas de web scraping en Python
Fuente: BairesDev