En este momento estás viendo Crear un entorno virtual Python en Debian 11

Crear un entorno virtual Python en Debian 11

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.

Entornos virtuales Python

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
Salida de 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
Instalando 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.

Creación del entorno virtual y comprobación

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#
Activamos el entorno virtual

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$
Iniciamos sesión en nuestro entorno python

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#
Instalación de paquetes en el entorno virtual

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#
Instalación de un paquete específico

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#
Actualización de paquetes

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$
Información de los paquetes

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#
Lista de paquetes instalados

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#
Deshabilitar el entorno virtual temporalmente

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.

Esta entrada tiene 2 comentarios

  1. Barto

    Gracias Javier, buen trabajo

Deja una respuesta

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.