Herramientas de gestión de dependencias para Python
Hayley Denbraver
15 de abril de 2020
0 minutos de lecturaLa gestión de dependencias es importante para la salud de tu proyecto de Python. Un proyecto con dependencias bien administradas obtiene beneficios en términos de previsibilidad, sostenibilidad y seguridad. Una buena gestión de dependencias garantiza un comportamiento predecible en los entornos locales, de desarrollo y de producción. Si tus dependencias están bien administradas, no tendrás problemas con plazos de soporte a largo plazo ni dependencias que no sean compatibles entre sí. Una gestión adecuada de dependencias también implica saber qué paquetes usas (directa o indirectamente), comprender los problemas de seguridad y tomar las medidas necesarias para solucionarlos.
Gestionar bien las dependencias puede ser difícil, y hay varias opciones para abordar este tema en tu proyecto de Python. Aquí analizaremos algunas, con el objetivo de que la gestión de dependencias sea lo más sencilla posible.
¿Qué opciones tengo para gestionar dependencias en Python?
Venv
El módulo venv forma parte de la biblioteca estándar de Python desde la versión 3.3. Si tienes Python 3.3 o una versión posterior en tu equipo, tienes venv. Venv se usa para crear entornos virtuales, que incluyen su propia instalación de Python, equivalente a la versión que usaste para crear el entorno. Para obtener más información sobre cómo usar venv para crear un entorno, activarlo e instalar paquetes en él, consulta la documentación oficial de Python. Venv es fácil de usar, ligero y una excelente opción para muchos proyectos de Python.
Virtualenv
Virtualenv es una biblioteca de terceros que crea entornos virtuales y se puede usar con versiones anteriores de Python. Muchos desarrolladores se pasaron a `venv` cuando se incluyó en la biblioteca estándar de Python 3.3. Python 2.7 dejó de recibir soporte a principios de 2020 y no recomendamos usarlo. Sin embargo, si tienes un proyecto que usa Python 2.7, puedes crear entornos virtuales con virtualenv. Virtualenv también cuenta con funciones que no están disponibles en venv, por lo que algunos expertos en Python también lo usan en sus proyectos de Python 3. Entre estas funciones se incluyen la posibilidad de actualizarlo con pip, mejoras de velocidad y una API completa. Al momento de escribir esto, virtualenv se mantiene activamente y su versión más reciente se publicó en abril de 2020. Aunque muchos lo asocian con Python 2.7, sigue vigente y es compatible con Python 3.
Pipenv
Pipenv es una opción para gestionar dependencias que incluye varias funciones adicionales. Su característica más destacada es que usa un archivo de bloqueo para garantizar compilaciones deterministas. También incluye funciones avanzadas, como especificar un índice de paquetes, detectar vulnerabilidades de seguridad, administrar variables de entorno fácilmente y funcionar bien con Windows. Al momento de escribir esto, la versión más reciente de Pipenv se publicó a finales de 2018. Como no se ha actualizado en un año y medio, algunos expertos en Python podrían dudar en usarlo. Me parece una herramienta fácil de usar, pero quizá dudaría en elegirla para un proyecto en el que espero trabajar durante mucho tiempo.
Poetry
Poetry es una herramienta para gestionar dependencias y empaquetar proyectos en Python. Al igual que Pipenv, Poetry usa un sistema de archivos de bloqueo para lograr compilaciones deterministas. Poetry siempre se asegura de que uses un entorno virtual, para que no alteres las instalaciones globales. Puedes declarar tus dependencias desde la línea de comandos o editar el archivo pyproject.toml. Poetry facilita la especificación de restricciones de versiones, lo cual es excelente para evitar versiones con vulnerabilidades de seguridad conocidas. Al momento de escribir esto, Poetry se mantiene activamente; su versión más reciente se publicó en febrero de 2020 y hay una versión preliminar de marzo de 2020.
Pip-tools
Pip-tools es un conjunto de herramientas de código abierto que ayuda a mantener actualizados tus paquetes basados en pip, incluso si tienen versiones fijadas. (Fijar versiones ayuda a garantizar compilaciones deterministas). Pip-tools consta de dos comandos independientes: `pip-compile` y `pip-sync`. El comando `pip-compile` crea tu archivo `requirements.txt`, y `pip-sync` instala los paquetes de forma predecible según lo indicado en ese archivo. Al momento de escribir esto, Pip-tools se mantiene activamente y su versión más reciente se publicó en febrero de 2020.
Hatch
Hatch es una herramienta de productividad de código abierto que te ayuda a gestionar dependencias y también incluye funciones para realizar pruebas, entre otras. Además, incluye herramientas para interactuar con PyPI, por lo que es excelente para quienes mantienen proyectos de código abierto. Al momento de escribir esto, Hatch parece mantenerse activamente. Su versión más reciente se publicó en octubre de 2019. Algunas de las otras opciones de esta lista tienen actualizaciones más recientes, pero probablemente sea una opción confiable en cuanto a mantenimiento.
¿Cómo puedo saber si hay vulnerabilidades de seguridad en los proyectos que uso?
Las herramientas de la sección anterior te ayudarán a asegurarte de que tus dependencias estén instaladas, actualizadas y aisladas de otras versiones que quizá hayas instalado para otros proyectos. Estas herramientas te ayudan a lograr compilaciones estables y predecibles en distintos entornos.
Al evaluar tus dependencias, los aspectos anteriores son muy importantes, pero no son los únicos que debes tener en cuenta. También querrás saber si hay vulnerabilidades de seguridad en tus dependencias y corregirlas. Pipenv ofrece algunas funciones relacionadas con las vulnerabilidades de seguridad conocidas. Independientemente de la herramienta de gestión de dependencias que elijas, Snyk puede ayudarte a encontrar y corregir vulnerabilidades en las dependencias de tu proyecto de Python. Incluso puedes abrir una solicitud de cambios (PR) directamente desde nuestro panel. Y lo mejor de todo: Snyk es gratis para proyectos de código abierto y públicos. Nuestro plan gratuito incluye 200 análisis al mes para repositorios privados. Nunca fue tan fácil usar código abierto y mantenerte protegido.
Empieza con los desafíos de Capture the Flag
Aprende a resolver desafíos de captura la bandera con nuestro taller virtual introductorio a pedido.



