Lección 28 de 45 · Módulos y orientación a objetos

Entornos virtuales y pip

Entiende dónde se instalan los paquetes y por qué cada proyecto debería poder tener sus propias dependencias sin interferir con los demás.

Aislar proyectosDiagnóstico de entornopip
Índice · Lección 28/45
El problema no es instalar un paquete; es decidir para qué proyecto lo instalas

Dos proyectos pueden necesitar versiones distintas de una misma biblioteca. Si instalas todo en el mismo Python global, tarde o temprano una actualización útil para un proyecto puede romper otro.

Un entorno virtual crea un espacio aislado de paquetes para un proyecto. pip instala dentro del Python que esté activo en ese momento.

Evidencia de aprendizaje

Diagnosticar si un paquete se instaló en el mismo intérprete con el que se ejecuta el proyecto.

Visualiza cada proyecto con su propia caja de herramientas

Tu código fuente sigue siendo código normal. Lo que cambia es qué intérprete y qué paquetes acompañan a ese proyecto.

Modelo mental: proyecto A → su entorno → sus paquetes. Proyecto B → otro entorno → otros paquetes. No necesitas duplicar Python entero; el entorno crea la separación necesaria para las dependencias.

Crear el entorno es preparar la caja, no activarla

En una terminal, situado en la carpeta del proyecto, el comando habitual es:

python -m venv .venv

.venv es solo un nombre de carpeta muy usado. El comando crea el entorno, pero tu terminal todavía puede seguir apuntando al Python anterior.

Por eso crear y activar son dos pasos diferentes.

Activar cambia qué Python y qué pip encontrará tu terminal

La activación depende del sistema y de la terminal. Después de activarlo, una comprobación muy útil es preguntar qué ejecutable estás usando:

python -c "import sys; print(sys.executable)"

La ruta debería apuntar al entorno del proyecto. Ese dato es más fiable que confiar únicamente en que el prompt muestre (.venv).

Instala después de activar, y verifica antes de culpar al código

Con el entorno correcto activo, python -m pip install paquete instala el paquete para ese intérprete.

python -m pip install requests

Usar python -m pip hace explícita la relación: «ejecuta el pip que pertenece a este Python». Si aparece un ModuleNotFoundError después de instalar algo, comprueba primero que estás ejecutando el mismo Python donde lo instalaste.

Diagnostica el entorno, no el código

Windows PowerShell
py -m venv .venv
.\.venv\Scripts\Activate.ps1
python -m pip install requests
macOS / Linux
python3 -m venv .venv
source .venv/bin/activate
python -m pip install requests

No memorices rutas de activación para otros sistemas. Usa el bloque que corresponde a tu entorno.

El programa dice ModuleNotFoundError
↓
¿Qué Python ejecuta el proyecto?
python -c "import sys; print(sys.executable)"
↓
¿Ese mismo Python ve el paquete?
python -m pip show requests
Caso de diagnóstico

Tu terminal muestra estas rutas:

sys.executable → /proyecto/.venv/bin/python
pip show       → paquete instalado en /usr/local/lib/python...

¿Cuál es la causa más probable?

Comprobar diagnóstico

El paquete se instaló para otro intérprete. Activa el entorno correcto y usa python -m pip install ... desde ese mismo Python. No cambies los imports de tu programa para “arreglarlo”.

No guardes el entorno como si fuera parte de tu código

La carpeta .venv suele ser grande y reproducible. Normalmente se excluye del control de versiones. Lo importante es conservar una lista reproducible de dependencias, no copiar la instalación completa.

Más adelante conocerás herramientas y formatos para fijar dependencias. Por ahora, quédate con la separación entre código del proyecto y entorno donde se ejecuta.

La competencia aquí es saber dónde estás instalando

  • Crear un entorno y activarlo son acciones distintas.
  • pip instala para un intérprete concreto.
  • Ante un paquete «desaparecido», compruebas primero sys.executable y el pip asociado.
No hace falta memorizar todos los comandos de activación

Esos comandos se consultan según tu sistema. Lo que sí debes entender es el modelo: proyecto → entorno → intérprete → paquetes.