Warning: Undefined array key "typ" in /srv/vhost/diaridigital.net/home/html/sourcecode/main/articles.php on line 18
Uso de entornos virtuales en Python con venv
Tiempo de lectura: 2 minutos
La solución para no mezclar entornos es crear un entorno virtual, un árbol de directorios autónomo que contenga una instalación de Python para una versión particular y una serie de paquetes relacionados.
El problema
Actualmente hay muchos desarrollos en Python realmente interesantes y, al instalar el software y sus dependencias, descargan todos los módulos necesarios para su funcionamiento.
El problema viene cuando queremos instalar otro desarrollo y se producen conflictos de dependencias porque la versión de Python es diferente o porque requiere de otros módulos de otras versiones y no se puede tener dos versiones de una misma biblioteca. Además, se va cargando el sistema con diferentes paquetes que se guardan con los del propio sistema.
Por otra parte, se pueden necesitar permisos de administrador para instalar algunos paquetes. Dependiendo del entorno de trabajo no se tiene ese nivel de acceso.
Hay más consecuencias por instalar muchos paquetes en el mismo directorio, como no poder extraer las dependencias que solo afectan a un proyecto ya que el freeze extraerá todas las que haya, sean o no del proyecto
$ python -m pip freeze > requirements.txt La solución
Para evitar estos dolores de cabeza se utilizan los entornos virtuales que no deja de ser una estructura de carpetas en las que se van ubicando las diferentes instalaciones. Se puede echar una ojeada con el comando tree:
$ tree venv venv\
│
├── Include\
│
├── Lib\
│ │
│ └── site-packages\
│ │
│ ├── _distutils_hack\
│ │
│ ├── pip\
│ │
│ ├── pip-22.0.4.dist-info\
│ │
│ ├── pkg_resources\
│ │
│ ├── setuptools\
│ │
│ ├── setuptools-58.1.0.dist-info\
│ │
│ └── distutils-precedence.pth
│
│
├── Scripts\
│ ├── Activate.ps1
│ ├── activate
│ ├── activate.bat
│ ├── deactivate.bat
│ ├── pip.exe
│ ├── pip3.10.exe
│ ├── pip3.exe
│ ├── python.exe
│ └── pythonw.exe
│
└── pyvenv.cfg
Esta estructura es transparente a la hora de trabajar en un proyecto concreto, basta con crear y activar un entorno y tendremos una instalación aislada de Python para nuestro proyecto. Veamos cómo se consigue.
Crear un entorno
Primero necesitamos tener una instalación de Python. Luego creamos un entorno virtual con venv, por ejemplo venv-01:
$ python3 -m venv venv-01 El entorno virtual se ha de activar antes de utilizarlo, esto permite trabajar sin necesidad de path absoluto. Asegúrate de estar en la carpeta del entorno creado y actívalo:
$ source venv-01/bin/activate
(venv-01) $ Ahora ya podemos instalar paquetes y sus dependencias específicas:
(venv-01) $ python -m pip install Al haber creado el entorno con Python3, no es necesario especificar la versión de python o pip explícitamente. Finalmente, al acabar el trabajo en el proyecto, se desactiva el entorno virtual:
(venv-01) $ deactivate
$ Referencias
Una utilidad en el uso de entornos virtuales es tener una referencia
$ python3 -m venv venv --prompt="dev-env"
$ source venv/bin/activate
(dev-env) $ Machacar un entorno
Al crear un entono virtual con un nombre que ya existe, con la intención de sobreescribirlo, el sistema no hace nada. De nada.
Podrías esperar que te avise que ya existe un entorno o que se borre, pero no. Lo que hay que hacer es usar el parámetro clear.
$ python3 -m venv venv --clear
$ venv/bin/pip list
Package Version
---------- -------
pip 22.0.4
setuptools 58.1.0 - Documentación oficial
https://docs.python.org - Real Python
https://realpython.com