/ 17 de octubre de 2016

Aviso: Este es un post antiguo, puede que su informaci贸n est茅 desactualizada. Si est谩 buscando algo sobre un evento actual, tenga en cuenta que puede que este no sea el que busca.

En ocasiones, necesitamos tener varios entornos de trabajo distintos, con distintas versiones del int茅rprete, distintas librer铆as, etc.

Una de las soluciones m谩s comunes es usar varios ordenadores o varias m谩quinas virtuales, cada una con una instalaci贸n diferente.

Pero Python nos provee de una herramienta simple y 煤til para facilitarnos ese trabajo, sin necesidad de recurrir a soluciones m谩s complicadas. Esta herramienta es 芦virtualenv禄.

virtualenv es un programa que permite crear entornos virtuales de Python. Un entorno virtual consta de un int茅rprete (podemos elegir la versi贸n concreta) acompa帽ado de todos los m贸dulos que necesitemos instalar. Se pueden tener varios entornos distintos, instalando en cada uno los m贸dulos que necesitemos, sin que unos entornos afecten a los otros.

Vamos a verlo de forma pr谩ctica.

Para empezar, necesitamos instalar la propia aplicaci贸n virtualenv. Esto se puede hacer desde el gestor de paquetes de tu distribuci贸n (apt-get, emerge, yum, pacman…) o, de manera m谩s general, con pip (en cualquier caso, hacen falta permisos de superusuario):

pip install virtualenv

Tras esto, ya tendremos el programa instalado y podemos comenzar a usarlo.

En Python 3 nos podemos ahorrar el paso de la instalaci贸n, porque ya viene por defecto.

virtualenv guarda cada entorno virtual en un directorio con el nombre de ese entorno. Dentro de ese directorio se guardar谩n todos los archivos necesarios (de ellos nos interesan, en particular, los m贸dulos que instalemos en el entorno y el script que lo inicia).

Es una buena idea tener en tu home un directorio donde agruparemos todos los entornos virtuales. En mi caso, en una escandalosa falta de originalidad, ese directorio se llama 芦virtualenvs禄.

Crear un entorno virtual es muy simple, del siguiente modo:

virtualenv DIRECTORIO-DEL-ENTORNO-VIRTUAL

Por ejemplo:

virtualenv nuevo-entorno

O, en mi caso, que estoy usando ese directorio llamado virtualenvs que ya he comentado para agrupar todos mis entornos:

virtualenv virtualenvs/nuevo-entorno

Al hacerse en espacio del usuario, ni la creaci贸n de un entorno virtual ni (como veremos m谩s adelante) la instalaci贸n de paquetes en 茅l, necesitan permisos especiales.

Esto crea el nuevo entrono en el directorio que le hemos indicado, creando en 茅l una estructura de directorios, copiando all铆 el ejecutable de Python y otros archivos necesarios, e incluyendo algunos m贸dulos por defecto (en realidad, la mayor铆a de ellos son enlaces simb贸licos a los originales, a menos que usemos la opci贸n –always-copy, que cambia este comportamiento).

Para que virtualenv nos d茅 m谩s detalles durante la creaci贸n de nuestro entorno, podemos usar la opci贸n –vervose (o -v en su versi贸n corta):

virtualenv --vervose virtualenvs/nuevo-entorno

Si necesitamos que nuestro entorno virtual ejecute una versi贸n concreta del int茅rprete de Python (que, l贸gicamente, debemos tener instalada en nuestro sistema), podemos indicarlo con la opci贸n -p de este modo:

virtualenv -p /usr/bin/python3.5 virtualenvs/nuevo-entorno

Si no se indica la opci贸n -p, se usar谩 el int茅rprete en /usr/bin/python.

Una vez creado nuestro entorno virtual, necesitamos activarlo para poder usarlo. Para ello vamos a usar uno de los scripts que se han instalado por defecto al crearlo. El script necesario es activate, y se encuentra en el directorio bin que se ha creado dentro del de nuestro entrono virtual:

source mis-virtualenvs/mi-entorno-virtual/bin/activate

La orden source se encarga de ejecutar en la sesi贸n de shell actual el script que se le pasa como par谩metro (es decir, que el efecto es el mismo que si el usuario tecleara esas instrucciones en su consola) en lugar de en su propia shell, como se ejecutan normalmente los scripts.

Al hacer esto, el prompt de shell cambiar谩 para indicar que se ha activado el entorno virtual, poniendo el nombre de este delante del prompt habitual, de un modo parecido a este:

(nuevo-entorno) usuario@host:~ 

A partir de este momento cualquier comando o script de python que se ejecute lo har谩 en el entorno virtual. Y, lo que es m谩s importante, cualquier m贸dulo que se instale (con pip, no con el gestor de paquetes del sistema) lo har谩 tambi茅n en el entorno virtual y no afectar谩 ni al resto de entornos virtuales que podamos tener, ni a la instalaci贸n de Python del sistema.

Naturalmente, esto se aplica s贸lo a la sesi贸n en la que se ha activado el entorno virtual. Si abrimos otra sesi贸n en otro terminal, por ejemplo, esa sesi贸n tendr谩 el entorno de Python normal de nuestro sistema. Por supuesto, se pueden tener varios entornos virtuales distintos corriendo simult谩neamente en diferentes sesiones sin ning煤n problema.

El comando deactivate desactivar谩 el entorno virtual, volviendo al entorno normal:

deactivate

Cualquier m贸dulo que se haya instalado en el entorno virtual se 芦desvanecer谩禄 como si nunca hubiese estado ah铆, hasta que se active de nuevo el mismo entorno virtual.

Para eliminar un entorno virtual que no queramos volver a usar, s贸lo es necesario borrar el directorio de su mismo su nombre con todo su contenido.

virtualenv es una herramienta muy 煤til que tiene otros usos m谩s all谩 de lo que se comenta en este art铆culo. Se pueden ver m谩s opciones de este programa en su propia ayuda:

virtualenv --help

驴Te interesa? Este art铆culo se ha escrito como parte del curso virtual Introducci贸n al lenguaje de programaci贸n Python que se iniciar谩 el pr贸ximo 24 de octubre. 隆A煤n quedan plazas libres!

5 respuestas a Entornos virtuales en Python con virtualenv

Deja una respuesta

Tu direcci贸n de correo electr贸nico no ser谩 publicada. Los campos obligatorios est谩n marcados con *

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

Web Campus Infantil
Logo y enlace Web Campus Infantil 2021
Web SereIngeniera
Logo y enlace Web SereIngeniera 2021
PyconES 2022
Logo y enlace PyconES 2022
Humor
Humor
Archivos
Categor铆as