---
title: venv (entornos virtuales) en python
url: https://jarroba.com/virtual-environments-venv-in-python/
author: Dionisio Cortes
date: 2017-06-25
modified: 2026-10-23
language: es
license: CC BY-NC-SA 3.0 (https://creativecommons.org/licenses/by-nc-sa/3.0/) — attribution: "venv (entornos virtuales) en python", Dionisio Cortes, jarroba.com
categories: Lenguajes de Programación
tags: python
repository: https://github.com/dionisioC/python_venv_example
---

# venv (entornos virtuales) en python

> En esta entrada vamos a mostrar ejemplos de como usar entornos virtuales (venv) en python para aislar nuestros proyectos entre sí

Herramienta

 

El proyecto de este post lo puedes descargar pulsando [AQUI](https://github.com/dionisioC/python_venv_example).

 

Los entornos virtuales en python (venv) son una forma que tenemos de poder aislar diferentes proyectos entre sí. Cuando nosotros trabajamos con python, muchas veces lo que hacemos es, cada vez que nos falta una dependencia:

 

sudo pip install DEPENDENCIA; por ejemplo

 

```bash
sudo pip install sympy
```

 

De esta manera, tenemos la librería disponible de forma global, con lo que eso supone. Si tenemos dos proyectos que usan esa librería, y uno de ellos necesita de una nueva característica de la nueva versión, si lo tenemos de forma global, lo actualizamos globalmente, con el consiguiente riesgo que ello supone para la otra aplicación. Una buena práctica es controlar las versiones del software que se tiene instalado, y antes de actualizar versiones (sobre todo si es una actualización grande de versión) hacer todas las pruebas pertinentes. Con los entornos virtuales lo que podemos es tener el entorno de la aplicación a con la versión x de esa librería y una aplicación b con una versión z de esa librería. Normalmente globales solo queremos tener, setuptools, pip y los propios entornos virtuales.

 

**Nota sobre entornos virtuales entre Python común y Anaconda:** en [el artículo Entornos virtuales de Python: común y Anaconda](https://jarroba.com/entornos-virtuales-de-python-comun-y-anaconda/)

 

## Controlando versiones

 

Una buena práctica es para cada proyecto tener un requirements.txt, de esta manera cuando alguien se baja un proyecto, puede crearse un entorno, instalar todas las dependencias con las que el proyecto está funcionando, y ponerse a trabajar.

 

Un fichero requirements.txt es algo tan sencillo como

 

libreria==version

 

Por ejemplo

 

```bash
sympy==1.0
```

 

## Usando entornos virtuales

 

Para instalarlo hacemos

 

```bash
sudo pip install virtualenv
```

 

Una vez que lo tenemos instalado podemos crear uno con:

 

virtualenv nombre_entorno

 

por ejemplo:

 

```bash
virtualenv env3
```

 

```bash
Using base prefix '/usr'
New python executable in /home/dio/envexample/env3/bin/python3.5
Also creating executable in /home/dio/envexample/env3/bin/python
Installing setuptools, pip, wheel...done.
```

 

Con esto, se nos han creado una serie de directorios y ficheros

 

```bash
ls -la
total 32
drwxr-xr-x 5 dio dio 4096 jun 18 17:08 .
drwxr-xr-x 3 dio dio 4096 jun 18 17:08 ..
drwxr-xr-x 2 dio dio 4096 jun 18 17:08 bin
drwxr-xr-x 2 dio dio 4096 jun 18 17:08 include
drwxr-xr-x 3 dio dio 4096 jun 18 17:08 lib
-rw-r--r-- 1 dio dio   60 jun 18 17:08 pip-selfcheck.json
```

 

El directorio bin contiene scripts para interactuar con el entorno virtual y una copia del intérprete de python y pip entre otras librerías. El directorio include contiene librerías de apoyo en caso de ser necesarias. El directorio lib es donde están todas las librerías de python que tenemos instaladas en ese entorno virtual.

 

De este modo, lo que hemos conseguido es crearnos un entorno virtual, pero no lo estamos usando todavía, tenemos que activarlo primero. Para ello, hacemos (dentro del directorio del entorno virtual):

 

```bash
cd env3
source bin/activate
(env3) ➜  env3
```

 

El prompt de la terminal cambia para decirnos que estamos usando el entorno virtual. Ahora, todo lo que usemos está dentro de nuestro entorno virtual. Si listamos los paquetes que tenemos instalados

 

```bash
pip list --format=columns         
Package    Version
---------- -------
pip        9.0.1  
setuptools 36.0.1 
wheel      0.29.0
```

 

Vemos que tenemos una instalación “básica“ de python en la que no tenemos paquetes.

 

Cuando ya no necesitemos el entorno virtual, o necesitemos trabajar con otro, tenemos que desactivarlo, si no se va a quedar activo toda la sesión con nosotros. Para ello hacemos:

 

```bash
deactivate
```

 

Y vemos como el prompt vuelve a la normalidad.

 

Con el entorno activado, si necesitamos instalar una librería (por ejemplo pytest), hacemos lo mismo que haríamos para instalarla de forma global, pero no necesitamos ser superusuarios:

 

```bash
(env3) ➜  env3 pip install pytest
Collecting pytest
  Using cached pytest-3.1.2-py2.py3-none-any.whl
Requirement already satisfied: setuptools in ./lib/python3.5/site-packages (from pytest)
Collecting py>=1.4.33 (from pytest)
  Using cached py-1.4.34-py2.py3-none-any.whl
Installing collected packages: py, pytest
Successfully installed py-1.4.34 pytest-3.1.2
(env3) ➜  env3
```

 

Si nos bajamos el proyecto de este tutorial, e intentamos ejecutar el main.py, nos va a dar error ya que no tenemos la dependencia necesaria. Como hemos comentado, si todas las dependencias de nuestro proyecto las tenemos en el fichero requirements.txt, es tan sencillo como hacer pip install -r requirements.txt para que nuestro proyecto tenga todas las dependencias.

 

```bash
(env3) ➜  python_venv_example git:(master) ✗ pip install -r requirements.txt 
Collecting sympy==1.0 (from -r requirements.txt (line 1))
  Downloading sympy-1.0.tar.gz (4.3MB)
    100% |████████████████████████████████| 4.3MB 434kB/s 
Collecting mpmath>=0.19 (from sympy==1.0->-r requirements.txt (line 1))
  Downloading mpmath-0.19.tar.gz (498kB)
    100% |████████████████████████████████| 501kB 2.9MB/s 
Building wheels for collected packages: sympy, mpmath
  Running setup.py bdist_wheel for sympy ... done
  Stored in directory: /home/dio/.cache/pip/wheels/05/93/22/2d0f59d842347b1f38df0d3f7a3870586df60568d2a49d94c5
  Running setup.py bdist_wheel for mpmath ... done
  Stored in directory: /home/dio/.cache/pip/wheels/02/2b/99/cd867d5da48d951118a8020e86c0c12a65022702426582d4b8
Successfully built sympy mpmath
Installing collected packages: mpmath, sympy
Successfully installed mpmath-0.19 sympy-1.0
(env3) ➜  python_venv_example git:(master) ✗
```

 

Si revisamos las dependencias vemos que se han instalado las que teníamos en el fichero requirements.txt

 

```bash
pip list --format=columns      
Package    Version
---------- -------
mpmath     0.19   
pip        9.0.1  
py         1.4.34 
pytest     3.1.2  
setuptools 36.0.1 
sympy      1.0    
wheel      0.29.0
```

 

### Bibliografía

 

- [venv — Creation of virtual environments (Python docs)](https://docs.python.org/3/library/venv.html)
- [python-guide-pt-br.readthedocs.io/en/latest/dev/virtualenvs](http://python-guide-pt-br.readthedocs.io/en/latest/dev/virtualenvs/)
- [github.com/sympy/sympy/wiki/Quick-examples](https://github.com/sympy/sympy/wiki/Quick-examples)
