Cuando trabajas en proyectos de Python probablemente deberías usar un entorno virtual (o un mecanismo similar) para aislar los paquetes que instalas para cada proyecto.
Nota
Si ya sabes sobre entornos virtuales, cómo crearlos y usarlos, quizás quieras saltarte esta sección. 🤓
Consejo
Un entorno virtual es diferente a una variable de entorno.
Una variable de entorno es una variable en el sistema que puede ser usada por los programas.
Un entorno virtual es un directorio con algunos archivos dentro.
Nota
Esta página te enseñará cómo usar entornos virtuales y cómo funcionan.
Si estás listo para adoptar una herramienta que maneja todo por ti (incluyendo instalar Python), prueba uv.
Lo que normalmente hago es crear un directorio llamado code dentro de mi directorio home/user.
Y dentro de ese creo un directorio por proyecto.
cd
mkdir code
cd code
mkdir awesome-project
cd awesome-project
fast →💬 Go to the home directorycd💬 Create a directory for all your code projectsmkdir code💬 Enter into that code directorycd code💬 Create a directory for this projectmkdir awesome-project💬 Enter into that project directorycd awesome-project restart ↻
Cada vez que instales un nuevo paquete en ese entorno, activa el entorno nuevamente.
Esto asegura que si usas un programa de terminal (CLI) instalado por ese paquete, uses el de tu entorno virtual y no cualquier otro que podría estar instalado globalmente, probablemente con una versión diferente a la que necesitas.
Este comando instalará pip si aún no está instalado y también asegurará que la versión instalada de pip sea al menos tan reciente como la disponible en ensurepip.
Después de activar el entorno virtual, puedes ejecutar tu programa, y usará el Python dentro de tu entorno virtual con los paquetes que instalaste ahí.
Probablemente usarías un editor, asegúrate de configurarlo para usar el mismo entorno virtual que creaste (probablemente lo autodetectará) para que puedas tener autocompletado y errores en línea.
Entonces, ¿cuál es el problema con instalar paquetes en el entorno global de Python?
En algún momento, probablemente terminarás escribiendo muchos programas diferentes que dependen de diferentes paquetes. Y algunos de estos proyectos en los que trabajas dependerán de diferentes versiones del mismo paquete. 😱
Por ejemplo, podrías crear un proyecto llamado philosophers-stone, este programa depende de otro paquete llamado harry, usando la versión 1. Así que necesitas instalar harry.
Luego, en algún momento después, creas otro proyecto llamado prisoner-of-azkaban, y este proyecto también depende de harry, pero este proyecto necesita harry versión 3.
Pero ahora el problema es, si instalas los paquetes globalmente (en el entorno global) en lugar de en un entorno virtual local, tendrás que elegir qué versión de harry instalar.
Si quieres ejecutar philosophers-stone necesitarás primero instalar harry versión 1, por ejemplo con:
Y entonces terminarías con harry versión 1 instalado en tu entorno global de Python.
Pero entonces si quieres ejecutar prisoner-of-azkaban, necesitarás desinstalar harry versión 1 e instalar harry versión 3 (o simplemente instalar la versión 3 desinstalaría automáticamente la versión 1).
Y entonces terminarías con harry versión 3 instalado en tu entorno global de Python.
Y si intentas ejecutar philosophers-stone nuevamente, hay una posibilidad de que no funcione porque necesita harry versión 1.
Consejo
Es muy común en los paquetes de Python intentar hacer lo mejor para evitar cambios que rompan en nuevas versiones, pero es mejor estar seguro, e instalar versiones más nuevas intencionalmente y cuando puedas ejecutar las pruebas para verificar que todo funciona correctamente.
Ahora, imagina eso con muchos otros paquetes de los que todos tus proyectos dependen. Eso es muy difícil de manejar. Y probablemente terminarías ejecutando algunos proyectos con algunas versiones incompatibles de los paquetes, y sin saber por qué algo no funciona.
Además, dependiendo de tu sistema operativo (ej. Linux, Windows, macOS), podría haber venido con Python ya instalado. Y en ese caso probablemente tenía algunos paquetes pre-instalados con algunas versiones específicas necesarias para tu sistema. Si instalas paquetes en el entorno global de Python, podrías terminar rompiendo algunos de los programas que venían con tu sistema operativo.
Un detalle importante es que pondrá el path del entorno virtual al principio de la variable PATH. El sistema lo encontrará antes de encontrar cualquier otro Python disponible. De esta manera, cuando ejecutes python, usará el Python del entorno virtual en lugar de cualquier otro python (por ejemplo, un python de un entorno global).
Activar un entorno virtual también cambia un par de otras cosas, pero esta es una de las más importantes que hace.
Eso significa que el programa python que se usará es el que está en el entorno virtual.
Usas which en Linux y macOS y Get-Command en Windows PowerShell.
La forma en que funciona ese comando es que irá y revisará en la variable de entorno PATH, recorriendo cada path en orden, buscando el programa llamado python. Una vez que lo encuentra, te mostrará el path a ese programa.
La parte más importante es que cuando llamas a python, ese es el exacto "python" que se ejecutará.
Así, puedes confirmar si estás en el entorno virtual correcto.
Consejo
Es fácil activar un entorno virtual, obtener un Python, y luego ir a otro proyecto.
Y el segundo proyecto no funcionaría porque estás usando el Python incorrecto, de un entorno virtual para otro proyecto.
Es útil poder verificar qué python se está usando. 🤓
Pero si desactivas el entorno virtual y activas el nuevo para prisoner-of-azkaban entonces cuando ejecutes python usará el Python del entorno virtual en prisoner-of-azkaban.
cd ~/code/prisoner-of-azkaban
deactivate
source .venv/bin/activate
python main.py
fast →cd ~/code/prisoner-of-azkaban 💬 You don't need to be in the old directory to deactivate, you can do it wherever you are, even after going to the other project 😎deactivate 💬 Activate the virtual environment in prisoner-of-azkaban/.venv 🚀source .venv/bin/activate 💬 Now when you run python, it will find the package sirius installed in this virtual environment ✨python main.py I solemnly swear 🐺
Esta es una guía simple para que empieces y te enseñe cómo funciona todo por debajo.
Hay muchas alternativas para manejar entornos virtuales, dependencias de paquetes (requisitos), proyectos.
Una vez que estés listo y quieras usar una herramienta para manejar todo el proyecto, dependencias de paquetes, entornos virtuales, etc. Te sugeriría que pruebes uv.
uv puede hacer muchas cosas, puede:
Instalar Python por ti, incluyendo diferentes versiones
Manejar el entorno virtual para tus proyectos
Instalar paquetes
Manejar las dependencias y versiones de paquetes para tu proyecto
Asegurar que tengas un conjunto exacto de paquetes y versiones para instalar, incluyendo sus dependencias, para que puedas estar seguro de que puedes ejecutar tu proyecto en producción exactamente igual que en tu computadora mientras desarrollas, esto se llama locking
Si leíste y entendiste todo esto, ahora sabes mucho más sobre entornos virtuales que muchos desarrolladores por ahí. 🤓
Conocer estos detalles probablemente será útil en un futuro cuando estés depurando algo que parece complejo, pero sabrás cómo funciona todo por debajo. 😎