Virtualenv y pip – Instalando librerías en un entorno virtual Python

Virtualenv Pip: Instalar librerías en un entorno virtual Python

Si estás familiarizad@ con Python o estás iniciándote, es posible que en algún tutorial hayas visto que hagan uso de virtualenv. Virtualenv es una herramienta que nos permite tener entornos Python totalmente separados y aislados, de manera que el intérprete y las librerías de proyectos diferentes no entren en conflicto.

¿Por qué es una buena práctica usar virtualenv?

Cuando estás desarrollando varios proyectos Python en un mismo ordenador, es posible que tengas más de un intérprete de Python instalado, por ejemplo, Python 2.7 y Python 3.6. Además, puede que en dos proyectos distintos hagas uso de una misma librería pero uses una versión diferente en cada uno de ellos.

¿Cómo haces para que dichas librerías no entren en conflicto? Imaginemos que tenemos dos proyectos llamados A y B y que ambos hacen uso de una misma librería lib_x. El proyecto A enlaza con la versión 1.0.0 de la librería lib_x y el proyecto B, por una serie de requisitos, utiliza nuevas funcionalidades de la librería lib_x que están recogidas en la versión 2.0.0.

Inicialmente no es posible mantener ambas versiones de la misma librería instaladas en el sistema, o se usa la versión 1.0.0 o la 2.0.0. Es aquí donde entra en juego virtualenv. Con virtualenv podemos tener entornos Python de configuración y ejecución independientes, de manera que la configuración y librerías de uno no entren en conflicto con los de otro.

Un entorno virtual está compuesto por un intérprete de Python, una configuración específica y librerías independientes.

Instalación de virtualenv

Para instalar virtualenv nos ayudaremos de otra herramienta que viene instalada junto con el intérprete de Python: pip. Pip es una utilidad de línea de comandos que nos permite instalar y administrar librerías y paquetes Python. Muchos de estos paquetes y librerías se encuentran alojados en el Python Package Index o PyPI, el repositorio oficial de Python para paquetes de terceros.

El comando para instalar virtualenv con pip es el siguiente:

$> pip install virtualenv

Una vez que tenemos instalado virtualenv en nuestro sistema, ya podremos crear todos los entornos virtuales que queramos.

Creando un entorno virtual con virtualenv

Para crear un entorno virtual con virtualenv nos situaremos en el directorio raíz de nuestro proyecto y ejecutaremos el siguiente comando:

$> virtualenv env

Esto creará el directorio env, el cuál contiene el entorno virtual:

/tutorial-virtualenv
|__/env
   |__/bin
   |__/include
   |__/lib

El directorio bin (se llama Scripts en Windows) contiene los ejecutables: como el intérprete de Python o pip. Por su parte, los directorios include y lib contienen las librerías necesarias para correr nuestro código. Las librerías de terceros se instalarán en env/lib/pythonX.X/site-packages/.

En mi caso, yo tengo dos versiones de Python instaladas: Python 2.7 (venía instalada con el sistema) y Python 3.6.

Python 2.7 es la versión por defecto y está instalada en /usr/bin, mientras que Python 3.6 lo está en /usr/local/bin. ¿Cómo indico a virtualenv qué versión de Python usar? Si no indicamos nada, virtualenv tendrá en cuenta la versión por defecto de Python. En el ejemplo, la versión de Python del entorno virtual es la 2.7. Si queremos usar la versión 3.6, debemos indicarle la ruta en la que se encuentra el intérprete de Python a utilizar, por ejemplo:

$> virtualenv -p /usr/local/bin/python3.6 env

Usar el entorno virtual

En el paso anterior creamos nuestro entorno virtual, sin embargo, si instalamos cualquier paquete no lo haremos en dicho entorno. Para ello, primero debemos activarlo ejecutando el siguiente comando:

$> source env/bin/activate

En el caso de Windows ejecutaremos:

$> env\Scripts\activate.bat

Sabremos que estamos dentro del entorno virtual porque el prompt del terminal comienza con (env):

virtualenv activate

Cualquier librería que instalemos ahora será dentro del entorno virtual.

Para salir del entorno virtual, lo haremos ejecutando el siguiente comando:

$> deactivate

requirements.txt

Por regla general, los proyectos Python suelen distribuirse con un fichero llamado requirements.txt. Este fichero contiene un listado con todas las librerías de las que depende el proyecto, junto con sus números de versión.

Los pasos para migrar un proyecto de una máquina a otra o desde un repositorio de código suelen ser:

  • Crear el entorno virtual con virtualenv
  • Activar el entorno
  • Instalar las dependencias indicadas en el fichero requirements.txt

Para instalar las librerías listadas en el fichero requirements.txt, basta con ejecutar el siguiente comando:

$> pip install -r requirements.txt

Consideraciones a tener en cuenta

Cuando se trabaja con virtualenv, debes tener en cuenta las siguientes cosas:

  • El entorno virtual hace uso de rutas absolutas. Si copias y pegas para duplicar, te llevas el entorno a otra máquina o cambias el nombre de algún directorio que esté incluido en la ruta de tu proyecto, no funcionará.
  • Es una buena práctica añadir tus propias variables de entorno al final del fichero activate.
  • Tu entorno virtual puede estar ubicado en cualquier parte del sistema de ficheros. Yo suelo tenerlo dentro de la carpeta del proyecto, junto con el código.
  • En el ejemplo, el entorno virtual lo he llamado env pero puedes darle el nombre que tú quieras. Por convención se suelen usar env o venv.

Ejemplo de configuración de un proyecto con virtualenv y requirements.txt:

/mi_proyecto
|_/env
|_program.py
|_requirements.txt
|_...py

Guía rápida (cheat sheet) de virtualenv y pip

🎯 Instalar virtualenv:

$> pip install virtualenv

🎯 Crear entorno virtual:

$> virtualenv env

🎯 Crear entorno virtual especificando el intérprete:

$> virtualenv -p ruta/interprete/python env

🎯 Crear entorno virtual heredando las librerías del sistema (no recomendado):

$> virtualenv --system-site-packages env

🎯 Activar el entorno virtual en Linux/Mac:

$> source env/bin/activate

🎯 Activar el entorno virtual en Windows:

$> env\Scripts\activate.bat

🎯 Salir del entorno virtual:

$> deactivate

🎯 Instalar un paquete/librería (por ejemplo, flask):

$> pip install flask

🎯 Instalar una versión concreta de un paquete/librería:

$> pip install flask==1.0.1

🎯 Actualizar la versión de un paquete/librería:

$> pip install flask -U

🎯 Desinstalar una librería:

$> pip uninstall flask

🎯 Listar todas las librerías:

$> pip list

🎯 Listar todos los paquetes/librerías en formato requirements.txt:

$> pip freeze

🎯 Crear/Actualizar el fichero requirements.txt:

$> pip freeze > requirements.txt

🎯 Mostrar la información de un paquete/librería:

$> pip show flask

Conclusión

Bueno amig@ Pythonista 🐍 En el tutorial hemos visto cómo gestionar distintos entornos virtuales Python con virtualenv. También hemos repasado cómo gestionar las dependencias, paquetes y librerías de un proyecto haciendo uso de la herramienta pip. Si tienes cualquier duda al respecto, puedes dejarme un comentario o ponerte en contacto conmigo.

Imagen de la cabecera: Vector de abstracto creado por freepik – www.freepik.es

¿Quieres ser expert@ en Python? Recibe trucos Python y las últimas novedades del blog

¡Eyyy! Esto también te puede interesar 👇

* Te informo de que los datos de carácter personal que proporciones al comentar serán tratados por Juan José Lozano Gómez como responsable de esta web. La Finalidad es moderar los comentarios. La Legitimación es gracias a tu consentimiento. Destinatarios: tus datos se encuentran alojados en Disqus (disqus.com), mi sistema de comentarios, que está acogido al acuerdo de seguridad EU-US Privacy. Podrás ejercer Tus Derechos de Acceso, Rectificación, Limitación o Suprimir tus datos enviando un email a juanjo@j2logo.com. Encontrarás más información en la POLÍTICA DE PRIVACIDAD.

Sobre j2logo

j2logo profile

Quiero ayudarte a que seas mejor programador/a, pero no uno cualquiera, sino uno de los top.

¿Quieres ser expert@ en Python? 🐍

❤️ He ayudado a miles de programadores/as como tú a ser mejores Pythonistas

📩 Recibe de vez en cuando trucos y scripts Python y las últimas novedades del blog

* Al enviar el formulario confirmas que aceptas la POLITICA DE PRIVACIDAD

¿Quieres ser expert@ en PYTHON?

j2logo-pythonistas

❤️ He ayudado a miles de programadores/as como tú

📩 Recibe trucos, scripts y las novedades del blog

¿Quieres dominar Python?

Python, Guía para ser un Pythonista

El curso con el que aprender el lenguaje desde cero. Con mi soporte y ayuda.

OFERTA BLACK FRIDAY

35% de descuento