Python
Tutorial Python: Entornos virtuales (virtualenv, venv)
Aprende a crear y gestionar entornos virtuales en Python con venv y virtualenv para aislar dependencias y evitar conflictos en tus proyectos.
Aprende Python y certifícateConcepto y necesidad de entornos virtuales
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:
- Una copia o enlace simbólico al intérprete de Python
- Un directorio
site-packages
donde se instalarán los paquetes - Scripts para activar y desactivar el entorno
Al activar un entorno virtual, se modifican temporalmente las variables de entorno del sistema para que:
python → apunte al intérprete del entorno virtual
pip → 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
opyproject.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:
- 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
- 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:~$
- 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:
- Instalar virtualenv (solo necesario una vez):
pip install virtualenv
- Crear el entorno virtual:
virtualenv nombre_entorno
O especificando una versión concreta de Python:
virtualenv -p python3.11 nombre_entorno
- 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
:
- Generar el archivo con los paquetes instalados:
pip freeze > requirements.txt
- 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
ovenv
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'
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, especifica 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.
Ejercicios de esta lección Entornos virtuales (virtualenv, venv)
Evalúa tus conocimientos de esta lección Entornos virtuales (virtualenv, venv) con nuestros retos de programación de tipo Test, Puzzle, Código y Proyecto con VSCode, guiados por IA.
Módulo math
Reto herencia
Excepciones
Introducción a Python
Reto variables
Funciones Python
Reto funciones
Módulo datetime
Reto acumulación
Reto estructuras condicionales
Polimorfismo
Módulo os
Reto métodos dunder
Diccionarios
Reto clases y objetos
Reto operadores
Operadores
Estructuras de control
Funciones lambda
Reto diccionarios
Reto función lambda
Encapsulación
Reto coleciones
Reto funciones auxiliares
Crear módulos y paquetes
Módulo datetime
Excepciones
Operadores
Diccionarios
Reto map, filter
Reto tuplas
Proyecto gestor de tareas CRUD
Tuplas
Variables
Tipos de datos
Conjuntos
Reto mixins
Módulo csv
Módulo json
Herencia
Análisis de datos de ventas con Pandas
Reto fechas y tiempo
Reto estructuras de iteración
Funciones
Reto comprehensions
Variables
Reto serialización
Módulo csv
Reto polimorfismo
Polimorfismo
Clases y objetos
Reto encapsulación
Estructuras de control
Importar módulos y paquetes
Módulo math
Funciones lambda
Reto excepciones
Listas
Reto archivos
Encapsulación
Reto conjuntos
Clases y objetos
Instalación de Python y creación de proyecto
Reto listas
Tipos de datos
Crear módulos y paquetes
Tuplas
Herencia
Reto acceso a sistema
Proyecto sintaxis calculadora
Importar módulos y paquetes
Clases y objetos
Módulo os
Listas
Conjuntos
Reto tipos de datos
Reto matemáticas
Módulo json
Todas las lecciones de Python
Accede a todas las lecciones de Python y aprende con ejemplos prácticos de código y ejercicios de programación con IDE web sin instalar nada.
Introducción A Python
Introducción
Instalación Y Creación De Proyecto
Introducción
Tema 2: Tipos De Datos, Variables Y Operadores
Introducción
Instalación De Python
Introducción
Tipos De Datos
Sintaxis
Variables
Sintaxis
Operadores
Sintaxis
Estructuras De Control
Sintaxis
Funciones
Sintaxis
Estructuras Control Iterativo
Sintaxis
Estructuras Control Condicional
Sintaxis
Testing Con Pytest
Sintaxis
Listas
Estructuras De Datos
Tuplas
Estructuras De Datos
Diccionarios
Estructuras De Datos
Conjuntos
Estructuras De Datos
Comprehensions
Estructuras De Datos
Clases Y Objetos
Programación Orientada A Objetos
Excepciones
Programación Orientada A Objetos
Encapsulación
Programación Orientada A Objetos
Herencia
Programación Orientada A Objetos
Polimorfismo
Programación Orientada A Objetos
Mixins Y Herencia Múltiple
Programación Orientada A Objetos
Métodos Especiales (Dunder Methods)
Programación Orientada A Objetos
Composición De Clases
Programación Orientada A Objetos
Funciones Lambda
Programación Funcional
Aplicación Parcial
Programación Funcional
Entrada Y Salida, Manejo De Archivos
Programación Funcional
Decoradores
Programación Funcional
Generadores
Programación Funcional
Paradigma Funcional
Programación Funcional
Composición De Funciones
Programación Funcional
Funciones Orden Superior Map Y Filter
Programación Funcional
Funciones Auxiliares
Programación Funcional
Reducción Y Acumulación
Programación Funcional
Archivos Comprimidos
Entrada Y Salida Io
Entrada Y Salida Avanzada
Entrada Y Salida Io
Archivos Temporales
Entrada Y Salida Io
Contexto With
Entrada Y Salida Io
Módulo Csv
Biblioteca Estándar
Módulo Json
Biblioteca Estándar
Módulo Datetime
Biblioteca Estándar
Módulo Math
Biblioteca Estándar
Módulo Os
Biblioteca Estándar
Módulo Re
Biblioteca Estándar
Módulo Random
Biblioteca Estándar
Módulo Time
Biblioteca Estándar
Módulo Collections
Biblioteca Estándar
Módulo Sys
Biblioteca Estándar
Módulo Statistics
Biblioteca Estándar
Módulo Pickle
Biblioteca Estándar
Módulo Pathlib
Biblioteca Estándar
Importar Módulos Y Paquetes
Paquetes Y Módulos
Crear Módulos Y Paquetes
Paquetes Y Módulos
Entornos Virtuales (Virtualenv, Venv)
Entorno Y Dependencias
Gestión De Dependencias (Pip, Requirements.txt)
Entorno Y Dependencias
Python-dotenv Y Variables De Entorno
Entorno Y Dependencias
Acceso A Datos Con Mysql, Pymongo Y Pandas
Acceso A Bases De Datos
Acceso A Mongodb Con Pymongo
Acceso A Bases De Datos
Acceso A Mysql Con Mysql Connector
Acceso A Bases De Datos
Novedades Python 3.13
Características Modernas
Operador Walrus
Características Modernas
Pattern Matching
Características Modernas
Instalación Beautiful Soup
Web Scraping
Sintaxis General De Beautiful Soup
Web Scraping
Tipos De Selectores
Web Scraping
Web Scraping De Html
Web Scraping
Web Scraping Para Ciencia De Datos
Web Scraping
Autenticación Y Acceso A Recursos Protegidos
Web Scraping
Combinación De Selenium Con Beautiful Soup
Web Scraping
En esta lección
Objetivos de aprendizaje 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.