Entornos virtuales en Python
Qué son, por qué existen, cómo crearlos, activarlos, usarlos y eliminarlos. Todo lo que necesitas recordar en un solo sitio.
Qué es un entorno virtual y por qué existe
Cuando instalas Python en tu sistema hay un único Python global. Si instalas ahí todos los paquetes de todos tus proyectos acabas con conflictos: el proyecto A necesita requests==2.28 y el proyecto B necesita requests==2.31, y no pueden coexistir en el mismo sitio.
Un entorno virtual es una carpeta que contiene su propia copia aislada del intérprete de Python y su propio directorio de paquetes. Cada proyecto tiene los suyos, sin pisarse entre sí ni tocar el Python del sistema.
Nota: el Python global es como el sistema operativo del servidor. Los entornos virtuales son como contenedores - cada aplicación vive en el suyo, con sus propias versiones de todo, sin interferir con las demás.
En Ubuntu (y en general en Linux moderno) instalar paquetes directamente en el Python del sistema está bloqueado por defecto - por eso pip install sin entorno virtual da error. Esto es intencionado: el sistema operativo usa ese Python y no quiere que lo rompas.
Crear un entorno
El módulo venv viene incluido con Python, no hay que instalar nada.
python3 -m venv nombre-del-entorno
El nombre es una carpeta que se crea en el directorio actual. Por convención se suele llamar venv o .venv (con punto para que quede oculta y no se incluya en git):
# dentro de la carpeta del proyecto:
python3 -m venv .venv
Nota: crea el entorno dentro de la carpeta del proyecto y añade .venv/ a tu .gitignore. Los entornos no se comparten ni se suben a git - lo que se comparte es el archivo requirements.txt
Qué hay dentro de la carpeta del entorno
.venv/
├── bin/ # intérprete python, pip, activate… (en Windows: Scripts/)
├── include/
├── lib/
│ └── python3.12/
│ └── site-packages/ # aquí se instalan los paquetes
└── pyvenv.cfg
Activar y desactivar
Activar un entorno modifica temporalmente tu sesión de terminal para que python y pip apunten al entorno en lugar al sistema.
| Sistema | Comando para activar |
|---|---|
| Linux / macOS (bash/zsh) | source .venv/bin/activate |
| Windows (PowerShell) | .venv\Scripts\Activate.ps1 |
| Windows (cmd) | .venv\Scripts\activate.bat |
Una vez activado, el prompt cambia para indicarlo:
usuario@pc:~/proyecto$ source .venv/bin/activate
(.venv) usuario@pc:~/proyecto$
A partir de aquí python y pip son los del entorno:
which python
/home/usuario/proyecto/.venv/bin/python
python --version
Python 3.12.3
Desactivar
deactivate
Vuelves al Python del sistema. El entorno no se borra, sigue ahí para la próxima vez.
Nota: si cierras la terminal el entorno se desactiva automáticamente. Al abrir una nueva terminal tienes que volver a hacer source .venv/bin/activate. El entorno no "persiste" entre sesiones, solo la carpeta persiste.
Usar el entorno sin activarlo
Puedes llamar directamente al Python del entorno sin activarlo. Útil en scripts o cron:
.venv/bin/python mi_script.py
.venv/bin/pip install requests
Instalar y gestionar paquetes
Con el entorno activo, pip instala solo en ese entorno:
pip install requests # última versión
pip install requests==2.31.0 # versión exacta
pip install "requests>=2.28,<3" # rango de versiones
pip install -r requirements.txt # desde archivo
Ver qué hay instalado
pip list # todos los paquetes
pip show requests # info de un paquete concreto
pip list --outdated # paquetes con versión nueva disponible
Actualizar y desinstalar
pip install --upgrade requests # actualizar
pip uninstall requests # desinstalar (pide confirmación)
pip uninstall -y requests # desinstalar sin confirmación
Listar entornos existentes en el sistema
Python no lleva un registro central de entornos. Para encontrarlos hay que buscarlos:
# busca carpetas llamadas venv o .venv en tu home
find ~ -name "pyvenv.cfg" -maxdepth 5 2>/dev/null
# muestra la ruta de cada entorno encontrado
find ~ -name "pyvenv.cfg" -maxdepth 5 2>/dev/null | xargs dirname
El archivo pyvenv.cfg es el marcador que crea venv dentro de cada entorno. Si está ahí, hay un entorno ahí.
Ver qué versión de Python usa cada entorno
cat /ruta/al/entorno/pyvenv.cfg
home = /usr/bin
version = 3.12.3
...
Exportar e importar dependencias
El requirements.txt es el archivo estándar para compartir qué paquetes necesita un proyecto.
Exportar (congelar el estado actual)
pip freeze > requirements.txt
Genera algo así:
certifi==2026.4.22
charset-normalizer==3.4.7
idna==3.13
requests==2.31.0
urllib3==2.6.3
Importar (reproducir el entorno en otra máquina)
python3 -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
Nota: Flujo habitual al retomar un proyecto: clonas el repo, creas el entorno, instalas el requirements.txt, y ya tienes exactamente las mismas versiones que cuando lo dejaste.
Borrar un entorno
Un entorno virtual es solo una carpeta. Para borrarlo, borras la carpeta. No hay comando especial: rm -rf .venv
Nota: Antes de borrar: asegúrate de que tienes el requirements.txt actualizado si quieres poder recrearlo. Una vez borrado no hay papelera de reciclaje.
Si el entorno estaba activo en esa terminal, haz deactivate antes de borrar para evitar comportamientos extraños en la sesión actual.
Referencia rápida
| Qué quieres hacer | Comando |
|---|---|
| Crear entorno | python3 -m venv .venv |
| Activar (Linux/Mac) | source .venv/bin/activate |
| Desactivar | deactivate |
| Instalar paquete | pip install requests |
| Instalar versión exacta | pip install requests==2.31.0 |
| Ver paquetes instalados | pip list |
| Exportar dependencias | pip freeze > requirements.txt |
| Instalar desde requirements | pip install -r requirements.txt |
| Actualizar paquete | pip install --upgrade requests |
| Desinstalar paquete | pip uninstall requests |
| Buscar entornos en el sistema | find ~ -name "pyvenv.cfg" -maxdepth 5 |
| Borrar entorno | rm -rf .venv |
Python 3.12 · módulo venv incluido en la stdlib · sin dependencias externas