Guía rápida de Python venv
algunos comandos útiles de venv
Venv es una herramienta de línea de comandos para la gestión de entornos virtuales. Una herramienta mucho más simple en comparación con Anaconda. Aquí hay algunos comandos útiles de venv.
Solo para que estés informado, hay una herramienta mucho mejor, a mi parecer, para la gestión de paquetes y entornos en Python, que es uv. Echa un vistazo: uv - Nuevo Gestor de Paquetes, Proyectos y Entornos de Python
Hoja de Referencia de Venv de Python
Crear un Entorno Virtual
-
Comando estándar (Python 3.3+):
python -m venv venv
Esto crea un entorno virtual llamado
venv
en tu directorio actual. -
Con una versión específica de Python (si está instalada):
python3.10 -m venv venv
o usando
virtualenv
:virtualenv -p /usr/local/bin/python3.10 venv
(Requiere el paquete
virtualenv
).
Activar el Entorno Virtual
- En Windows:
.\venv\Scripts\activate
- En macOS/Linux:
El prompt de la shell ahora debe mostrar el nombre del entorno.source venv/bin/activate
Desactivar el Entorno Virtual
- En todos los sistemas:
Esto te devuelve a tu Python del sistema.deactivate
Instalar Paquetes
- Con pip:
Ejemplo:pip install
pip install numpy pandas
- Actualizar pip (recomendado):
python -m pip install --upgrade pip
Congelar y Exportar Requisitos
- Guardar los paquetes del entorno actual:
pip freeze > requirements.txt
- Instalar desde un archivo de requisitos:
Asegúrate de que tu entorno virtual esté activado antes de ejecutar estos comandos.pip install -r requirements.txt
Eliminar un Entorno Virtual
deactivate
rm -rf <env path>
Errores Comunes al Gestionar Entornos Virtuales de Python
Olvidar Activar el Entorno Virtual
- Un error frecuente es ejecutar comandos sin activar el entorno virtual deseado, lo que lleva a la instalación de paquetes en el entorno global o en el venv incorrecto. Esto puede causar conflictos de dependencias y comportamiento impredecible.
No Fijar Versiones de Paquetes
- Usar especificadores de versión sueltos (como
>=
en lugar de==
) enrequirements.txt
socava la reproducibilidad. Fijar versiones exactas asegura que todos los que trabajan en el proyecto usen las mismas versiones de paquetes, evitando problemas inesperados durante la implementación o la colaboración.
Mezclar Entornos Globales y Virtuales
- Instalar paquetes globalmente o mezclar entornos globales y virtuales puede crear conflictos, especialmente si diferentes proyectos requieren versiones incompatibles de paquetes. Siempre asegúrate de operar dentro del entorno correcto.
Incluir Entornos Virtuales en el Control de Versiones
- Incluir la carpeta del entorno virtual (por ejemplo,
venv/
) en el control de versiones agranda los repositorios y es innecesario. Siempre agrega las carpetas de venv a.gitignore
para mantener tu repositorio limpio.
No Separar Dependencias de Desarrollo y Producción
- No distinguir entre dependencias de desarrollo y producción puede resultar en implementaciones infladas o inseguras. Usa archivos de requisitos separados o secciones de configuración para cada uno.
Falta de Documentación y Automatización
- No documentar los pasos de configuración del entorno o fallar en automatizar el proceso (con scripts o Makefiles) dificulta la incorporación de nuevos colaboradores y la reproducción de entornos.
No Limpiar Regularmente Entornos Antiguos
- Con el tiempo, los entornos virtuales no utilizados pueden acumularse, desperdiciando espacio en disco y causando confusión. Elimina regularmente los venvs obsoletos para mantener un espacio de trabajo ordenado.
Ignorar los Límites del Python del Sistema y los Gestores de Paquetes
- Modificar el Python del sistema o mezclar gestores de paquetes del sistema con pip puede romper herramientas del sistema e introducir problemas difíciles de diagnosticar. Siempre usa venvs para dependencias del proyecto y evita interferir con paquetes gestionados por el sistema.
Tabla de Resumen
Peligro | Impacto |
---|---|
Olvidar activar el venv | Instala paquetes en el entorno incorrecto |
No fijar versiones de paquetes | Construcciones impredecibles, bugs difíciles de reproducir |
Mezclar entornos globales y virtuales | Conflictos de dependencias/versiones |
Incluir directorios de venv en control de versiones | Repositorios inflados, desordenados |
No separar dependencias de desarrollo y producción | Entornos de producción inflados/inseguros |
Falta de documentación/automatización | Dificultad para incorporar nuevos colaboradores, configuraciones inconsistentes |
No limpiar entornos antiguos | Desperdicio de espacio en disco, confusión |
Modificar Python del sistema o paquetes | Inestabilidad del sistema, herramientas rotas |
Seguir buenas prácticas, como siempre activar tu venv, fijar dependencias, separar entornos y mantener documentación clara, puede ayudarte a evitar estos errores comunes.
Diferencias Clave Entre Conda y Entornos Virtuales para la Reproducibilidad
Característica | Entornos Conda | Entornos Virtuales de Python (venv/virtualenv) |
---|---|---|
Ámbito de Gestión | Gestiona paquetes de Python y dependencias no-Python (por ejemplo, bibliotecas del sistema, compiladores) | Gestiona solo paquetes de Python mediante pip |
Control de Versión de Python | Puede especificar e instalar cualquier versión de Python por entorno | Usa la versión de Python instalada en el sistema |
Consistencia entre Plataformas | Más consistente entre diferentes OS (Windows, macOS, Linux) debido a la gestión de todas las dependencias | Depende de las bibliotecas del sistema, que pueden variar por OS |
Fuentes de Paquetes | Usa repositorios de Conda (binarios precompilados, pila científica) | Usa PyPI (pip) para paquetes de Python |
Reproducibilidad | Mayor para proyectos complejos, científicos o de múltiples lenguajes; puede exportar el entorno completo (conda env export ) |
Buena para proyectos de solo Python; puede carecer de reproducibilidad si se involucran dependencias del sistema |
Dependencias No-Python | Puede instalar y gestionar (por ejemplo, OpenBLAS, libpng) | No puede gestionar; deben instalarse por separado |
Exportar/Importar Entornos | conda env export / conda env create para reproducibilidad completa |
pip freeze > requirements.txt / pip install -r requirements.txt (solo paquetes de Python) |
Rendimiento | Más rápido y confiable para grandes paquetes científicos (por ejemplo, numpy, pandas) | Puede requerir compilar desde el código fuente, especialmente en Windows |
Complejidad | Slightly higher setup and management overhead | Lightweight, simpler for basic Python projects |
Resumen de Puntos Clave
-
Entornos Conda son ideales para la reproducibilidad en proyectos que requieren tanto dependencias de Python como no-Python, o cuando la replicación exacta entre plataformas es crítica. Conda gestiona toda la pila, incluyendo Python en sí mismo, bibliotecas y hasta compiladores, lo que hace más fácil compartir y reproducir entornos complejos, especialmente en contextos de ciencia de datos e investigación.
-
Entornos virtuales de Python (
venv
/virtualenv
) son ligeros y excelentes para aislar dependencias de Python en proyectos de solo Python. Sin embargo, no gestionan dependencias del sistema o no-Python, por lo que la reproducibilidad puede comprometerse si tu proyecto depende de bibliotecas externas o configuraciones específicas del sistema. -
Exportar y compartir entornos: Conda te permite exportar una especificación completa del entorno (
conda env export
), incluyendo todas las dependencias y sus versiones, que pueden recrearse exactamente en otro lugar. Con entornos virtuales,pip freeze
solo captura paquetes de Python, no dependencias del sistema ni la versión del intérprete de Python. -
Conclusión
Usa Conda para la máxima reproducibilidad en proyectos científicos, transplataformas o proyectos complejos. Usa entornos virtuales de Python para proyectos ligeros de solo Python donde las dependencias del sistema no son un problema.