Saltar al contenido

¿Qué es un virtualenv y por qué debería usar uno?

Emiliano, parte de este equipo de trabajo, nos ha hecho el favor de escribir este tutorial porque conoce a la perfección este tema.

Solución:

La ejecución con el sistema Python y las bibliotecas lo limita a una versión específica de Python, elegida por su proveedor de sistema operativo. Si intenta ejecutar todas las aplicaciones de Python en una instalación de Python, es probable que se produzcan conflictos de versiones entre la colección de bibliotecas. También es posible que los cambios en el sistema Python rompan otras características del sistema operativo que dependen de él.

Los entornos virtuales, o “virtualenvs” son instalaciones de Python ligeras y autónomas, diseñadas para ser configuradas con un mínimo de esfuerzo y para “simplemente funcionar” sin requerir una configuración extensa o conocimientos especializados.

virtualenv evita la necesidad de instalar paquetes de Python a nivel mundial. Cuando un virtualenv está activo, pip instalará paquetes dentro del entorno, lo que no afecta la instalación base de Python de ninguna manera.

En Python 3.3 o posterior, puede crear un virtualenv de la siguiente manera:

$ python3 -m venv ENV_DIR

Para Windows, debe reemplazar python3 con la ruta completa a python.exe:

>C:Python34python.exe -m venv ENV_DIR

(Esta es una instalación típica de Python; su sistema puede variar).

En versiones anteriores de Python, incluido Python 2, uno de los siguientes comandos debería funcionar en la mayoría de los casos:

$ virtualenv ENV_DIR
$ venv ENV_DIR
$ pyvenv ENV_DIR
$ pyvenv3 ENV_DIR

ENV_DIR debería ser un directorio inexistente. El directorio puede tener cualquier nombre, pero para mantener estas instrucciones simples, asumiré que ha creado su virtualenv en un directorio llamado venv (por ejemplo, con python3 -m venv ./venv).

Para trabajar en su virtualenv, lo activa:

$ . ./venv/bin/activate
(venv)$ 

O use esto si tiene un sistema de Windows:

$ venvScriptsactivate

los (venv) en el indicador de shell le permite saber qué virtualenv ha activado, pero puede desactivar esta función si no le gusta. Puede ejecutar todos los comandos habituales de Python, y serán locales para su virtualenv:

(venv)$ pip install requests numpy
[...]
(venv)$ python
[...]
>>> import requests
>>> import numpy as np
>>> 

python ejecutará la versión de Python que instaló en su virtualenv, por lo que (por ejemplo) no tiene que escribir python3 para obtener Python 3. El Python que ejecuta tendrá acceso a todos los módulos de la biblioteca estándar y todos los paquetes que instaló en virtualenv, pero (por defecto) ninguno de los paquetes instalados en todo el sistema site-packages directorio.

Esta última regla es importante: al restringir su virtualenv para que solo use paquetes instalados localmente, puede asegurarse de controlar exactamente qué dependencias está usando su proyecto, incluso si se instala o actualiza algún paquete nuevo para todo el sistema la semana que viene. Si lo desea, puede obtener una lista de sus paquetes instalados:

(venv)$ pip freeze
requests==2.13.0
numpy==1.12.0
(venv)$ 

pip también puede analizar este formato e instalarlo desde él, e instalará las mismas versiones, incluso si se han lanzado actualizaciones mientras tanto:

(venv)$ pip freeze >requirements.txt

(some-other-venv)$ pip install -r requirements.txt
[...]
(some-other-venv)$ python
>>> import requests
>>> import numpy as np
>>> 

Puede salir del virtualenv desactivándolo:

(venv)$ deactivate
$ python
[...]
>>> import requests
Traceback (most recent call last):
  File "", line 1, in 
ImportError: No module named 'requests'

Puede crear tantos virtualenvs como desee y no interferirán entre sí ni con los paquetes de su sistema. Un virtualenv es “solo” un directorio con un montón de binarios y scripts debajo, por lo que puede eliminar un virtualenv de la misma manera que elimina cualquier directorio (rm -r venv en Unix). Si el virtualenv está activado cuando lo elimina, puede confundir su shell, por lo que probablemente sea una buena idea deactivate primero en ese caso.

Algunas veces no se le otorgan privilegios de root y es posible que no pueda usar sudo. Muchas otras veces, no es recomendable usar sudo para instalar paquetes, ya que podría sobrescribir algún paquete que podría estar siendo usado por otras aplicaciones.

Virtualenv puede ayudarlo a crear un entorno separado en el que no necesita privilegios de root y también puede personalizar el entorno de acuerdo con sus necesidades. Consiste en una instalación autónoma de Python que solo interactúa con su entorno creado específico.

Básicamente, le da un poco de libertad y evita dañar (o modificar) el entorno raíz que podría albergar muchas funcionalidades antiguas de aplicaciones antiguas.

La instalación también es bastante fácil.

Instalación de paquetes con sudo pip instalará paquetes a nivel mundial, lo que puede dañar algunas herramientas del sistema.

Instalar globalmente significa que instalará sus paquetes en un lugar como /usr/lib/python2.7/site-package por lo que si algunos paquetes necesitan una versión anterior de sus paquetes de Python, esta acción puede romperla.

virtualenv Te permite evitar instalar paquetes de Python a nivel mundial creando un entorno de Python aislado. Eso significa que instalará paquetes solo en la carpeta de proyecto que desee.

En mac y linux

  • Instalar en pc

    python3 -m pip install --user virtualenv
    
  • Creación de un entorno virtual: vaya a la carpeta del proyecto que desee

    python3 -m virtualenv env
    
  • Activando un virtualenv: en la carpeta de su proyecto deseada

    source env/bin/activate
    

Después de activarlo, puede instalar sus paquetes usando pip.

Para obtener más información sobre cómo usarlo en Windows: Cómo usar virtualenv en Windows

Comentarios y puntuaciones

Si entiendes que te ha sido provechoso nuestro artículo, sería de mucha ayuda si lo compartieras con otros seniors de este modo nos ayudas a difundir nuestra información.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

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