Entornos virtuales (virtualenv, venv)

Intermedio
Python
Python
Actualizado: 05/05/2026

Diagrama del tema

Concepto y necesidad de entornos virtuales

flowchart TD
    GLOB["Python global (sistema)"] -.->|aislamiento| VENV["venv: entorno virtual"]
    VENV --> ACT["activate (bash/PS)"]
    ACT --> PIP["pip install dentro del venv"]
    PIP --> REQ["requirements.txt: reproducibilidad"]
    VENV --> DIR["bin/Scripts, lib/site-packages"]
    GLOB -.->|alternativas| TOOLS["virtualenv, conda, poetry, uv"]
    REQ --> CI["Despliegue idéntico en CI/producción"]
    VENV --> PYV["Diferentes versiones Python por proyecto"]

Los entornos virtuales en Python son espacios aislados donde puedes instalar paquetes y dependencias específicas para un proyecto sin afectar a la instalación global de Python en tu sistema. Funcionan como "contenedores" independientes que mantienen separados los requisitos de software de diferentes proyectos.

¿Por qué necesitamos entornos virtuales?

Imagina que estás trabajando en varios proyectos Python simultáneamente. El Proyecto A requiere Django 3.2, mientras que el Proyecto B necesita Django 4.2. Sin entornos virtuales, tendrías que instalar una versión u otra en tu sistema, lo que haría imposible trabajar en ambos proyectos sin cambiar constantemente las versiones instaladas.

Los entornos virtuales resuelven varios problemas fundamentales:

  • Conflictos de dependencias: Diferentes proyectos pueden requerir diferentes versiones de las mismas bibliotecas.

  • Aislamiento de proyectos: Cada proyecto mantiene sus propias dependencias sin interferir con otros.

  • Reproducibilidad: Facilitan la creación de entornos idénticos en diferentes máquinas, asegurando que el código funcione de manera consistente.

  • Limpieza del sistema: Evitan la acumulación de paquetes innecesarios en la instalación global de Python.

  • Gestión de versiones de Python: Permiten usar diferentes versiones de Python para distintos proyectos.

Tipos de herramientas para entornos virtuales

Python ofrece varias herramientas para crear y gestionar entornos virtuales:

  • venv: Módulo incluido en la biblioteca estándar desde Python 3.3. Es la opción recomendada para la mayoría de los usuarios.

  • virtualenv: Una herramienta externa más antigua que funciona con Python 2 y 3, con características adicionales.

  • conda: Sistema de gestión de paquetes y entornos que va más allá de Python, útil especialmente para ciencia de datos.

  • pipenv: Combina pip y virtualenv en una sola herramienta con gestión de dependencias mejorada.

  • poetry: Herramienta moderna para gestión de dependencias y empaquetado.

Cómo funcionan los entornos virtuales

Cuando creas un entorno virtual, se genera un directorio que contiene:

  1. Una copia o enlace simbólico al intérprete de Python
  2. Un directorio site-packages donde se instalarán los paquetes
  3. Scripts para activar y desactivar el entorno

Al activar un entorno virtual, se modifican temporalmente las variables de entorno del sistema para que:

python a apunte al intérprete del entorno virtual
pip a instale paquetes en el entorno virtual

Esto se refleja habitualmente en el prompt de la terminal, que muestra el nombre del entorno activo:

(mi_entorno) usuario@equipo:~$

Beneficios en el desarrollo profesional

En entornos de desarrollo profesional, los entornos virtuales son prácticamente obligatorios porque:

  • Facilitan la documentación de dependencias mediante archivos como requirements.txt o pyproject.toml
  • Permiten la integración continua y el despliegue automatizado
  • Mejoran la colaboración en equipo al garantizar que todos trabajan con el mismo entorno
  • Evitan el temido "en mi máquina funciona" al estandarizar los entornos

Mejores prácticas

Para aprovechar al máximo los entornos virtuales:

  • Crea un entorno virtual para cada proyecto, incluso si son pequeños
  • Incluye archivos de requisitos en el control de versiones, pero excluye la carpeta del entorno virtual (añádela a .gitignore)
  • Utiliza nombres descriptivos para tus entornos que reflejen el propósito del proyecto
  • Considera usar herramientas como pip-tools para bloquear versiones exactas de dependencias

Los entornos virtuales son una herramienta fundamental en el flujo de trabajo moderno de Python, y dominarlos es esencial para cualquier desarrollador que busque mantener proyectos organizados y libres de conflictos.

Creación y activación

Una vez comprendida la importancia de los entornos virtuales, el siguiente paso es aprender a crearlos y activarlos. Python ofrece varias herramientas para esto, pero nos centraremos en las dos más comunes y recomendadas: venv (incluido en la biblioteca estándar) y virtualenv (paquete externo).

Usando venv (recomendado)

El módulo venv viene integrado en Python desde la versión 3.3, lo que lo convierte en la opción más accesible y recomendada oficialmente. Para crear un entorno virtual con venv, sigue estos pasos:

  1. Crear el entorno virtual:
python -m venv nombre_entorno

Este comando creará un directorio con el nombre especificado que contendrá todos los archivos necesarios para el entorno virtual. Por ejemplo:

python -m venv mi_proyecto_env
  1. Activar el entorno virtual:

La activación varía según el sistema operativo:

  • En Windows (cmd):
nombre_entorno\Scripts\activate.bat
  • En Windows (PowerShell):
nombre_entorno\Scripts\Activate.ps1
  • En Unix o MacOS:
source nombre_entorno/bin/activate

Una vez activado, notarás que el prompt de la terminal cambia para mostrar el nombre del entorno entre paréntesis:

(mi_proyecto_env) usuario@equipo:~$
  1. Desactivar el entorno virtual:

Para salir del entorno virtual, simplemente ejecuta:

deactivate

Usando virtualenv

Aunque venv es suficiente para la mayoría de los casos, virtualenv ofrece algunas características adicionales y es compatible con versiones más antiguas de Python. Para usarlo:

  1. Instalar virtualenv (solo necesario una vez):
pip install virtualenv
  1. Crear el entorno virtual:
virtualenv nombre_entorno

O especificando una versión concreta de Python:

virtualenv -p python3.11 nombre_entorno
  1. Activar y desactivar el entorno virtual:

El proceso de activación y desactivación es idéntico al de venv.

Estructura de directorios

Al crear un entorno virtual, se genera una estructura de directorios similar a esta:

mi_proyecto_env/
├── bin/               # Scripts de activación (Unix/MacOS)
│   ├── activate
│   ├── pip
│   └── python
├── include/           # Archivos de cabecera C
├── lib/               # Bibliotecas y paquetes instalados
│   └── pythonX.Y/
│       └── site-packages/
└── pyvenv.cfg         # Configuración del entorno

En Windows, en lugar de bin/ encontrarás un directorio Scripts/.

Instalación de paquetes en el entorno

Una vez activado el entorno, puedes instalar paquetes que solo estarán disponibles dentro de él:

pip install nombre_paquete

Por ejemplo:

pip install requests

Gestión de dependencias

Para facilitar la reproducibilidad del entorno, es común guardar la lista de paquetes en un archivo requirements.txt:

  1. Generar el archivo con los paquetes instalados:
pip freeze > requirements.txt
  1. Recrear el entorno en otro lugar:
pip install -r requirements.txt

Ubicación recomendada

Es recomendable crear el entorno virtual dentro del directorio del proyecto:

mi_proyecto/
├── .git/
├── .gitignore          # Debe incluir "venv/" o "mi_proyecto_env/"
├── mi_proyecto_env/    # Entorno virtual
├── requirements.txt
└── src/                # Código fuente

Prácticas avanzadas

  • Nombrar entornos consistentemente: Usa nombres como .venv o venv para facilitar su identificación.

  • Usar variables de entorno: Crea un archivo .env para configuraciones específicas del entorno:

# .env
DEBUG=True
API_KEY=mi_clave_secreta
  • Automatizar la activación: Herramientas como direnv pueden activar automáticamente el entorno al entrar al directorio del proyecto.

  • Usar alias: Crea alias para comandos frecuentes:

# En .bashrc o .zshrc
alias venv='python -m venv .venv && source .venv/bin/activate'

uv: gestor moderno de entornos y dependencias

En los últimos años ha aparecido uv, un gestor de entornos y paquetes escrito en Rust por el equipo de Astral. Reemplaza el flujo tradicional de venv + pip por una única herramienta muy rápida, compatible con el ecosistema existente de pyproject.toml y requirements.txt.

Instalación de uv con el instalador oficial:

# Linux y macOS
curl -LsSf https://astral.sh/uv/install.sh | sh

# Windows (PowerShell)
powershell -c "irm https://astral.sh/uv/install.ps1 | iex"

Creación de un entorno y instalación de dependencias con uv:

# Crea el entorno en .venv y lo prepara con la versión solicitada
uv venv --python 3.13

# Instala un paquete en el entorno del directorio actual
uv pip install requests

# Sincroniza el entorno con un archivo de requisitos
uv pip sync requirements.txt

Además, uv run permite ejecutar scripts sin necesidad de activar manualmente el entorno:

uv run python -m pytest
uv run python src/main.py

Las ventajas principales de uv son la velocidad (instalaciones hasta 10 veces más rápidas que pip), la resolución de dependencias determinista y el soporte nativo para descargar versiones concretas de Python, eliminando la necesidad de pyenv en la mayoría de los casos.

Integración con el editor de código

Los editores modernos detectan y seleccionan el entorno virtual automáticamente cuando se encuentra en el directorio del proyecto con uno de los nombres convencionales (.venv o venv).

En PyCharm (o IntelliJ IDEA con el plugin de Python) basta con abrir Settings a Project a Python Interpreter, pulsar el icono de engranaje y seleccionar Add Interpreter a Virtualenv Environment a Existing environment, apuntando al intérprete ubicado en .venv/Scripts/python.exe en Windows o .venv/bin/python en Unix. A partir de ese momento, el terminal integrado activa el entorno automáticamente al abrirse y las herramientas de inspección, el depurador y los tests usan las dependencias del entorno correcto.

El propio PyCharm guarda la configuración del intérprete en el directorio .idea/ del proyecto, por lo que todos los miembros del equipo que abran el proyecto con el mismo IDE detectarán el entorno virtual sin pasos adicionales. También es recomendable definir la variable de entorno PYTHONDONTWRITEBYTECODE=1 en la configuración de ejecución para evitar que se generen ficheros .pyc dentro del proyecto durante el desarrollo.

Comparativa de herramientas

Cada herramienta ocupa un nicho diferente dentro del ecosistema Python. Esta tabla resume cuándo conviene cada opción:

| Herramienta | Uso recomendado | Ventaja principal | |-------------|-----------------|-------------------| | venv | Proyectos pequeños y medianos | Incluida en la biblioteca estándar, sin instalaciones externas | | virtualenv | Proyectos que necesitan Python 2 o extras no cubiertos por venv | Más antiguo y con más opciones de configuración | | pipenv | Proyectos que quieren combinar pip y venv en un solo comando | Pipfile + lockfile, flujo sencillo | | poetry | Librerías y paquetes publicables en PyPI | Gestión integral: dependencias, versiones, build y publicación | | uv | Proyectos nuevos que priorizan velocidad y simplicidad | Gestor único muy rápido, compatible con pyproject.toml y requirements.txt | | conda | Proyectos de ciencia de datos con dependencias binarias (CUDA, MKL) | Gestiona también dependencias no-Python del sistema |

Como regla general, para scripts y proyectos sencillos basta con venv + pip o uv. Para librerías publicadas, poetry sigue siendo una excelente opción. Y para entornos de data science con GPU o compiladores, conda mantiene su relevancia.

requirements.txt frente a pyproject.toml

Históricamente, Python ha gestionado las dependencias con requirements.txt: un listado plano de paquetes con versiones. Aunque sigue siendo válido, la comunidad se ha movido hacia pyproject.toml, el formato definido en PEP 518 y PEP 621 que unifica metadatos del proyecto, dependencias, herramientas y configuración.

Ejemplo de pyproject.toml con dependencias básicas:

[project]
name = "mi-proyecto"
version = "0.1.0"
requires-python = ">=3.12"
dependencies = [
    "requests>=2.32",
    "httpx>=0.27",
]

[project.optional-dependencies]
dev = [
    "pytest>=8.0",
    "ruff>=0.6",
]

Instalación del proyecto y sus extras de desarrollo con pip:

pip install -e ".[dev]"

Con uv o poetry, la lectura de pyproject.toml es nativa y se añade un lockfile (uv.lock, poetry.lock) que fija versiones exactas para garantizar builds reproducibles.

Solución de problemas comunes

  • Error de permisos: Si encuentras errores de permisos al crear entornos, considera usar la opción --user con pip o revisar los permisos del directorio.

  • Entorno no se activa: Verifica que estás usando la ruta correcta al script de activación y que tienes permisos de ejecución.

  • Paquetes no disponibles: Asegúrate de que el entorno está activado antes de instalar o usar paquetes.

  • Conflictos de Python: Si tienes múltiples versiones de Python instaladas, específica la versión al crear el entorno:

python3.11 -m venv mi_entorno

Con estos conocimientos, ya puedes crear y gestionar entornos virtuales para tus proyectos Python, manteniendo tus dependencias organizadas y evitando conflictos entre proyectos.

Fuentes y referencias

Documentación oficial y recursos externos para profundizar en Python

Documentación oficial de Python
Alan Sastre - Autor del tutorial

Alan Sastre

Ingeniero de Software y formador, CEO en CertiDevs

Ingeniero de software especializado en Full Stack y en Inteligencia Artificial. Como CEO de CertiDevs, Python es una de sus áreas de expertise. Con más de 15 años programando, 6K seguidores en LinkedIn y experiencia como formador, Alan se dedica a crear contenido educativo de calidad para desarrolladores de todos los niveles.

Más tutoriales de Python

Explora más contenido relacionado con Python y continúa aprendiendo con nuestros tutoriales gratuitos.

Aprendizajes de esta lección

Comprender qué son los entornos virtuales y por qué son necesarios en Python. Aprender a crear, activar y desactivar entornos virtuales usando venv y virtualenv. Conocer la estructura de directorios de un entorno virtual y cómo gestionar paquetes dentro de él. Entender las mejores prácticas para el uso de entornos virtuales en proyectos profesionales. Saber cómo documentar y reproducir entornos mediante archivos de dependencias como requirements.txt.