Crear un entorno virtual Python en Debian 11
Las aplicaciones escritas en Python hacen uso de paquetes de software y módulos específicos de cada versión y que, por tanto, no son estandar. Estas aplicaciones necesitan una versión concreta de una librería y son incompatibles entre ellas.
Por eso, tener una instalación de Python, no nos garantiza que todas las aplicaciones funcionen. Si una aplicación necesita la versión 1.0 de un módulo y otra aplicación requiere la versión 2.0, los requerimientos entrarán en conflicto y la instalación de una versión dejará una de las aplicaciones sin funcionar.
La solución a este problema es la creación de entornos virtuales. Vamos a ver como se crean estos entornos que nos permitirán que cada aplicación tenga su propio entorno virtual, con la versión apropiada, que conseguirá que funciones las dos aplicaciones sin incompatibilidades. Con ello también conseguiremos que la actualización de librerías en un entorno no afecte al otro.
Sumario
- Definición de entorno virtual
- Instalación
- Creación del entorno virtual
- Habilitar el entorno virtual
- Instalar, actualizar y eliminar paquetes
- Instalar paquetes
- Desinstalar paquetes
- Ver información de los paquetes
- Ver los paquetes instalados
Definición de entorno virtual
Un entorno virtual Python es un directorio que contiene la instalación completa de una versión de Python, en el cual se incluyen varios paquetes específicos así como todos los módulos adicionales que resulten necesarios.
Podemos crear varios entornos, de forma que consigamos tener un número ilimitado de versiones y módulos de Python diferentes. Todo ello con independencia de la versión principal de Python instalada en el sistema. Estos entornos son imprescindibles para desarrolladores, ya que permiten instalar aplicaciones que requieren de diferentes versiones y módulos de Python, como por ejemplo, Odoo, Django o Flask.
Instalación
La instalación y puesta en funcionamiento de un entorno virtual, es un proceso bastante sencillo. Vamos a instalar lo que también se llama «Python virtual environment».
Como siempre que vamos a instalar algo, lo primero que tenemos que hacer es actualizar nuestro sistema.
sudo apt update sudo apt upgrade
Verificamos la versión de Python que tenemos instalada en nuestro sistema.
python3 -V
Para crear un nuevo entorno virtual necesitamos el paquete «python3-venv». Este paquete instalará el módulo «venv» junto con algunas dependencias necesarias. Podemos utilizar cualquier versión Python que queramos, siempre y cuando esté disponible en el repositorio de la distribución.
sudo apt -y install python3-venv
La salida completa del comando
javier@weblinus:~$ sudo apt -y install python3-venv [sudo] password for javier: Leyendo lista de paquetes... Hecho Creando árbol de dependencias... Hecho Leyendo la información de estado... Hecho Los paquetes indicados a continuación se instalaron de forma automática y ya no son necesarios. bc libcupsfilters1 ssl-cert Utilice «sudo apt autoremove» para eliminarlos. Se instalarán los siguientes paquetes adicionales: python-pip-whl python3-distutils python3-lib2to3 python3.9-venv Se instalarán los siguientes paquetes NUEVOS: python-pip-whl python3-distutils python3-lib2to3 python3-venv python3.9-venv 0 actualizados, 5 nuevos se instalarán, 0 para eliminar y 23 no actualizados. Se necesita descargar 2.175 kB de archivos. Se utilizarán 3.413 kB de espacio de disco adicional después de esta operación. Des:1 http://deb.debian.org/debian bullseye/main amd64 python-pip-whl all 20.3.4-4+deb11u1 [1.948 kB] Des:2 http://deb.debian.org/debian bullseye/main amd64 python3-lib2to3 all 3.9.2-1 [77,8 kB] Des:3 http://deb.debian.org/debian bullseye/main amd64 python3-distutils all 3.9.2-1 [143 kB] Des:4 http://deb.debian.org/debian bullseye/main amd64 python3.9-venv amd64 3.9.2-1 [5.396 B] Des:5 http://deb.debian.org/debian bullseye/main amd64 python3-venv amd64 3.9.2-3 [1.188 B] [.......................................................................] Seleccionando el paquete python-pip-whl previamente no seleccionado. (Leyendo la base de datos ... 163098 ficheros o directorios instalados actualmente.) Preparando para desempaquetar .../python-pip-whl_20.3.4-4+deb11u1_all.deb ... Desempaquetando python-pip-whl (20.3.4-4+deb11u1) ... Seleccionando el paquete python3-lib2to3 previamente no seleccionado. Preparando para desempaquetar .../python3-lib2to3_3.9.2-1_all.deb ... Desempaquetando python3-lib2to3 (3.9.2-1) ... Seleccionando el paquete python3-distutils previamente no seleccionado. Preparando para desempaquetar .../python3-distutils_3.9.2-1_all.deb ... Desempaquetando python3-distutils (3.9.2-1) ... Seleccionando el paquete python3.9-venv previamente no seleccionado. Preparando para desempaquetar .../python3.9-venv_3.9.2-1_amd64.deb ... Desempaquetando python3.9-venv (3.9.2-1) ... Seleccionando el paquete python3-venv previamente no seleccionado. Preparando para desempaquetar .../python3-venv_3.9.2-3_amd64.deb ... Desempaquetando python3-venv (3.9.2-3) ... Configurando python-pip-whl (20.3.4-4+deb11u1) ... Configurando python3-lib2to3 (3.9.2-1) ... Configurando python3-distutils (3.9.2-1) ... Configurando python3.9-venv (3.9.2-1) ... Configurando python3-venv (3.9.2-3) ... javier@weblinus:~$
Creación del entorno virtual
Para crear nuestro primer entorno virtual de Python, tenemos que crear un nuevo directorio de trabajo ejecutando el módulo «venv» que creará este de forma automática. Vamos a nombrar el directorio como «Desarrollo_Pyton»(Le quito la h a Python para diferenciar el entorno). Ejecutamos el siguiente comando.
sudo python3 -m venv ruta_a_directorio/nombre_entorno
Una buena opción es ubicarlo en el directorio /opt
sudo python3 -m venv /opt/Desarrollo_Pyton
Esto creará el directorio «Desarrollo_Pyton» si no existe, y también creará directorios dentro de él que contienen una copia del intérprete de Python y varios ficheros de soporte. Para verificarlo ejecutamos
ls /opt/Desarrollo_Pyton
El directorio debe incluir los siguientes ficheros: bin, include, lib, lib64, pyvenv.cfg y share.
Habilitar el entorno virtual
Bien, solo falta habilitar el entorno, para ello accedemos al directorio y lo activamos. No olvides cambiar «Desarrollo_Pyton», por el nombre que tú le hayas puesto. Primero escalamos privilegios.
su - cd /opt/ source Desarrollo_Pyton/bin/activate
NOTA: Este script está escrito para la consola «bash». Si usas las consolas «csh» o «fish», tienes que usar, en su lugar, los script alternativos «activate.csh» y «activate.fish».
Al activar el entorno virtual, nos cambiará el «prompt» de la terminal/consola para mostrar que entorno virtual está usando, y modificará el entorno para que al ejecutar python sea con esa versión e instalación en particular. Observa que el nombre que le hemos puesto aparece al principio de cada línea de nuestra terminal/consola.
javier@weblinus:~$ su - Contraseña: root@weblinus:~# cd /opt/ root@weblinus:/opt# source Desarrollo_Pyton/bin/activate (Desarrollo_Pyton) root@weblinus:/opt#
Una vez que lo tenemos habilitado, ya podemos comenzar a trabajar en nuestro nuevo proyecto. También podemos instalar y usar cualquier aplicación Python, incluyendo nuevos módulos.
Instalar, actualizar y eliminar paquetes
Para instalar, actualizar y eliminar paquetes, tenemos que utilizar un programa llamado «pip». De forma predeterminada instalará paquetes del indice de paquetes de Python . El programa «pip», tiene varios subcomandos como «install», «uninstall», «freeze» y alguno más, que luego veremos. Consulta la guía de instalación de módulos de Python para tener toda la información.
«Install»
Para instalar la última versión de un paquete tenemos que especificar su nombre.
Iniciamos sesión en nuestro entorno virtual desplazándonos al punto de instalación y ejecutando el comando «source Desarrollo_Pyton/bin/activate». Recuerda que has de cambiar el nombre del entorno por el que hayas puesto. En mi caso
javier@weblinus:~$ cd /opt/ javier@weblinus:/opt$ source Desarrollo_Pyton/bin/activate (Desarrollo_Pyton) javier@weblinus:/opt$
Para instalar la última versión de un paquete tenemos que especificar su nombre. Para instalar paquetes tenemos que escalar privilegios.
root@weblinus:~# cd /opt/ root@weblinus:/opt# source Desarrollo_Pyton/bin/activate (Desarrollo_Pyton) root@weblinus:/opt# python -m pip install novas Collecting novas Downloading novas-3.1.1.5.tar.gz (135 kB) |████████████████████████████████| 135 kB 4.4 MB/s Using legacy 'setup.py install' for novas, since package 'wheel' is not installed. Installing collected packages: novas Running setup.py install for novas ... done Successfully installed novas-3.1.1.5 (Desarrollo_Pyton) root@weblinus:/opt#
También podemos instalar una versión concreta de un paquete añadiendo a su nombre «==numero_versión». Por ejemplo
(Desarrollo_Pyton) root@weblinus:/opt# python -m pip install requests==2.6.0 Collecting requests==2.6.0 Downloading requests-2.6.0-py2.py3-none-any.whl (469 kB) |████████████████████████████████| 469 kB 4.1 MB/s Installing collected packages: requests Successfully installed requests-2.6.0 (Desarrollo_Pyton) root@weblinus:/opt#
Para actualizar un paquete a la última versión, tenemos que ejecutar «pip install –upgrade nombre_paquete».
(Desarrollo_Pyton) root@weblinus:/opt# python -m pip install --upgrade requests Requirement already satisfied: requests in ./Desarrollo_Pyton/lib/python3.9/site-packages (2.6.0) Collecting requests Downloading requests-2.28.0-py3-none-any.whl (62 kB) |████████████████████████████████| 62 kB 38 kB/s Collecting charset-normalizer~=2.0.0 Downloading charset_normalizer-2.0.12-py3-none-any.whl (39 kB) Collecting certifi>=2017.4.17 Downloading certifi-2022.5.18.1-py3-none-any.whl (155 kB) |████████████████████████████████| 155 kB 8.1 MB/s Collecting urllib3<1.27,>=1.21.1 Downloading urllib3-1.26.9-py2.py3-none-any.whl (138 kB) |████████████████████████████████| 138 kB 42.9 MB/s Collecting idna<4,>=2.5 Downloading idna-3.3-py3-none-any.whl (61 kB) |████████████████████████████████| 61 kB 169 kB/s Installing collected packages: urllib3, idna, charset-normalizer, certifi, requests Attempting uninstall: requests Found existing installation: requests 2.6.0 Uninstalling requests-2.6.0: Successfully uninstalled requests-2.6.0 Successfully installed certifi-2022.5.18.1 charset-normalizer-2.0.12 idna-3.3 requests-2.28.0 urllib3-1.26.9 (Desarrollo_Pyton) root@weblinus:/opt#
Desinstalar paquetes
Para desinstalar paquetes tenemos que ejecutar «pip uninstall» seguido de los nombres de los paquetes que ya no nos interesen.
Ver información de los paquetes
Para ver información de los paquetes, tenemos que ejecutar «pip show» y el nombre del paquete.
(Desarrollo_Pyton) javier@weblinus:/opt$ pip show requests Name: requests Version: 2.28.0 Summary: Python HTTP for Humans. Home-page: https://requests.readthedocs.io Author: Kenneth Reitz Author-email: me@kennethreitz.org License: Apache 2.0 Location: /opt/Desarrollo_Pyton/lib/python3.9/site-packages Requires: idna, certifi, urllib3, charset-normalizer Required-by: (Desarrollo_Pyton) javier@weblinus:/opt$
Ver los paquetes instalados
Si ejecutamos «pip list» nos mostrará una lista con todos los paquetes instalados en el entorno actual.
(Desarrollo_Pyton) root@weblinus:/opt# pip list Package Version ------------------ ----------- certifi 2022.5.18.1 charset-normalizer 2.0.12 idna 3.3 novas 3.1.1.5 pip 20.3.4 pkg-resources 0.0.0 requests 2.28.0 setuptools 44.1.1 urllib3 1.26.9 (Desarrollo_Pyton) root@weblinus:/opt#
También obtendremos un listado similar con el comando «pip freeze»
Para deshabilitar temporalmente el entorno virtual, sin borrarlo, tenemos que ejecutar «deactivate».
(Desarrollo_Pyton) root@weblinus:/opt# deactivate root@weblinus:/opt#
Puedes ver una implementación de un entorno virtual Python para albergar un proyecto con Django descargado de github en «Paperless 4 Herramienta para escanear documentos y gestionarlos» .
Si tienes algún comentario que hacer sobre este artículo, al pie del post tienes un formulario para hacerlo.
Si quieres contactar conmigo por cualquier otro asunto relacionado con el sitio, en la página de contacto, tienes un formulario más adecuado.
Y para suscribirte y recibir las novedades publicadas, tienes un enlace en el pie de la página o desde aquí mismo.
Gracias Javier, buen trabajo
Gracias Barto por tu visita y comentario.