Warning: Undefined array key "HTTP_ACCEPT_LANGUAGE" in /srv/vhost/diaridigital.net/home/html/sourcecode/includes/config.php on line 61

Deprecated: substr(): Passing null to parameter #1 ($string) of type string is deprecated in /srv/vhost/diaridigital.net/home/html/sourcecode/includes/config.php on line 61
Uso de entornos virtuales en Python con venv
Source Code

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
Referencias

Warning: Undefined array key "typ" in /srv/vhost/diaridigital.net/home/html/sourcecode/includes/navigation.inc.php on line 3

Warning: Undefined array key "typ" in /srv/vhost/diaridigital.net/home/html/sourcecode/includes/navigation.inc.php on line 21
Xavier es un desarrollador senior full stack y opera desde la ciudad mediterránea de Barcelona. Le encantan las tecnologías de software y está convencido que el desarrollo de software es un proceso colaborativo y abierto.
Y es un apasionado de la astronomía y de la fotografía. Lo puedes encontrar en:
Comparte este post


Warning: Undefined array key "typ" in /srv/vhost/diaridigital.net/home/html/sourcecode/includes/footer.inc.php on line 24