Regularmente cuando comenzamos a dar nuestros primeros pasos con Python y debemos hacer uso de alguna dependencia de algún tercero, es decir, usar librerías, módulos o frameworks que el lenguaje no nos ofrece de forma nativa, que no se encuentran la biblioteca estándar de python, lo primero que nos puede venir a la mente es instalar todo en la raíz de nuestro sistema. 🌱
Por ejemplo.
pip install pandas
pip install django
pip install polars
Al instalar las dependencias a nivel sistema, tendremos acceso a estas librerías (dependencias) en cualquier parte de nuestro sistema operativo. Ya sea en documentos, descargar, imágenes etc…
Esto puede sonar como una muy buena idea, pero la realidad es que no lo es. Esto ya que, en teoría, todos los proyectos son diferentes. Cada proyecto tiene su propio stack de dependencias y de versiones que debe usar para poder funcionar.
Es por ello que en este vídeo me gustaría mostrarte la forma correcta de poder gestionar las dependencias para cada uno de tus proyectos, esto mediante entornos virtuales. 🐍
Será un vídeo sumamente interesante, principalmente si eres desarrollador o desarrolladora Python, así que te invito a que te quedes.
Bien, una vez dicho todo esto, comencemos.
Entornos virtuales.
Si nosotros instalamos una librería con una versión en particular a nivel sistema operativo, por ejemplo instalamos Django 1.11, podremos usar Django, en esa versión en particular, para todos los proyectos en nuestra computadora.
Sin embargo, qué pasa si algún proyecto en particular de nuestro sistema requiere Django, pero no en su versión 1.11, si no ahora en la versión 4.2. Bueno allí tendríamos un problema, ya que ciertos proyectos requieren una versión en particular y otros proyectos requieren otras versiones.
Quizás te estés preguntando, Si ciertos proyectos requieren una visión y otros, otras versiones, ¿por qué no instalamos todas las versiones que necesitemos y listo? 🤔
Bueno, si hacemos eso tendremos un problema mucho mayor, ya que los proyectos pueden entrar en conflictos con sus versiones, y existe la posibilidad que, al tener tantas versiones instaladas todos los proyectos dejen de funcionar. 🤐
Por lo tanto, para evitar este problema, y que todos tus proyectos en Python puedan funcionar de forma correcta y puedan co-existir en tu computadora, lo que debemos hacer es implementar entornos virtuales.
En términos simple los entornos virtales podemos definirlos como espacio aislado donde seremos capaces de gestionar cada una de las dependencias necesarias para cada proyecto.
Estos entornos son autónomos e individuales. Es decir, un entorno para cada uno de los proyectos. 🤓
Cada entorno virtual contiene su propia instalación de Python y las bibliotecas o paquetes necesarios para que el proyecto pueda funcionar.
Esto ayuda a evitar conflictos entre versiones de bibliotecas y asegura que un proyecto tenga todas las dependencias correctas, independientemente de las de otros proyectos.
Podemos ver a los entornos como pequeñas burbujas, donde en cada una de ellas está todo los necesario para que un proyecto en particular pueda funcionar. Esto incluye una versión de Python, librerías, módulos, Frameworks etc…
Aquí un par de ventajas de tener entornos virtuales.
Aislamiento de proyectos: Los entornos virtuales permiten aislamiento completo entre proyectos. Cada proyecto puede tener su propia versión de Python y sus propias dependencias sin interferir con otros proyectos.
Portabilidad: Puedes compartir un archivo de requisitos con otros desarrolladores para que puedan crear el mismo entorno virtual en sus sistemas, lo que garantiza que todos trabajen en el mismo entorno.
Gestión de dependencias: Puedes instalar y gestionar fácilmente las bibliotecas y paquetes requeridos para un proyecto específico dentro de su propio entorno virtual. Esto garantiza que todas las dependencias se mantengan bajo control y se puedan replicar fácilmente.
Creando entornos. 🌲
Ahora ¿cómo podemos crear nuestros entornos?
Si trabajas con una versión superior a Python 3, la creación de los entornos se hace de la siguiente manera. En terminal ejecutamos el siguiente comando.
python -m venv env
Por buenas practicas los entornos debemos nombrarlos como env. Si bien es cierto podemos definir el nombre que deseemos, te recomiendo siempre seguir una convención . 🐞
Una vez el entorno haya sido creado, lo siguiente será activarlo. La activación depende completamente del sistema operativo. Aquí los comandos que necesitas.
Unix.
source env/bin/activate
Windows.
env\\Scripts\\activate
Para desactivar el entorno, independientemente de tu sistema operativo, debes ejecutar el comando deactivate en consola.
Una vez con el entorno activado, ya seremos capaces de instalar todo lo que nuestro proyecto necesite. Las instalaciones ya no se harán a nivel sistema, si no ahora a nivel entorno.
Por lo tanto, si queremos ejecutar nuestro proyecto siempre debemos tener nuestro entorno activado.
En caso requieras conocer que dependencias y en que versión se han instalado en el entorno te recomiendo hacer uso del siguiente comando.
pip freeze
Este comando listará cada una de las dependencias instaladas en tu entorno, esto con sus correspondientes versiones.
Es importante mencionar que, nuevamente, por buenas prácticas de programación, los entornos nunca se suben a los repositorios de git, o de cualquier otro manejador de versiones.
Por lo tanto, siempre es una excelente idea crear un archivo llamado requirements.txt en el cual almacenaremos el listado de todas las dependencias.
Será a través de este archivo con el cual podremos generar nuevamente nuestro entorno. Garantizando así que el entorno sea portable. Este archivo Sí se sube al repositorio.
Para crear el archivo ejecutamos el comando.
pip freeze > requirements.txt
Una vez tengamos este archivo, ya podremos generar nuevamente el entorno en cualquier parte o en cualquier sistema operativo que deseemos. Basta con ejecutar el comando.
pip install -r requirements.txt
Con esto se instalarán cada una de las dependencias dentro del listado con sus correspondientes versiones.
Conclusión
Si eres una persona nueva en desarrollo con Python es posible que todos estos comandos pueden abrumarte, pero no te preocupes, es completamente normal.
Algo que me sirvió mucho para aprender todos estos comandos, es tener un listado de todos ellos y el orden en que se deben ejecutar. Esto me permitió, mediante la práctica, aprenderme cada uno de ellos.
Es importante mencionar que es buena idea hacernos al hábito de crear un entorno para cada uno de nuestros proyectos. No importa si el proyecto es pequeño o grande; trabajar con entornos virtuales nos garantizará que los proyectos sean completamente independientes unos de otros. Así podremos trabajar con múltiples proyectos con múltiples requerimientos en cientos o miles de versiones diferentes sin ningún problema. 🍻