Crear ambiente virtual de Python

De nuxpy
Ir a la navegación Ir a la búsqueda

Python ofrece la posibilidad de crear un ambiente o entorno exclusivo para cada aplicación, cada ambiente poseerá las librerías necesarias que se requieren con la versión requerida de estas.

Así, cada aplicación funcionará de manera semi aislada sin perturbar la ejecución de otra o presentar conflictos de alguna incompatibilidad o convivencia de librerías similares de diferentes versiones.

Crear proyecto

Inicialmente se debe destinar un directorio exclusivo para el proyecto, después de esto, dentro del directorio se genera el árbol correspondiente para las librerías que trabajarán con dicho proyecto.

Crear el directorio del proyecto y puede ser con cualquier usuario del sistema:

mkdir miproyecto

Luego dentro del directorio cargar el ambiente o entorno virtual:

cd miproyecto
python -m venv venv

Este comando generará dentro del directorio del proyecto un árbol de ambiente para el proyecto.

Activación del entorno virtual

Una vez creado el árbol, se "enciende" el entorno virtual:

. venv/bin/activate

Posteriormente el prompt se vería de la siguiente manera:

(venv) nuxpy@pc:~/programacion/python/miproyecto $

Una vez activado el entorno se pueden realizar instalaciones de las librerías de la siguiente manera:

pip3 install flask

Estas instalaciones solo afectarán al entorno en cuestión.

Como observación o sugerencia general, antes de usar el instalador pip se recomienda actualizarlo, por ejemplo:

pip3 install --upgrade pip

Desactivación del entorno virtual

La desactivación simplemente cierra el prompt del ambiente virtual y retorna al prompt del usuario en cuestión. Para esto se puede usar el siguiente comando:

deactivate

Ejecución del proyecto

Dentro del directorio miproyecto se debe crear un fichero vacío llamado __init__.py, ejemplo:

touch __init__.py

Suponiendo que el árbol del proyecto se verá parecido al siguiente:

.
├── __init__.py
├── base.py
├── static
│   ├── css
│   └── js
├── templates
│   └── var
│       ├── db
│       └── log
└── venv

Una vez que se tiene el entorno, fichero __init__.py y árbol del proyecto se puede realizar un pequeño script que levante el proyecto, este debe ir ubicado fuera del directorio miproyecto y puede tener el siguiente contenido:

#!/home/nuxpy/programacion/python/miproyecto/venv/bin/python3
# -*- coding: utf-8 -*-
from miproyecto import base
if __name__ == "__main__":
    base.main()

Así cuando se ejecute el proyecto las variables de entorno y librerías que usará serán las instaladas dentro del ambiente virtual declarado dentro del proyecto.

Replicación de paquetes

Si se desea replicar los paquetes de un ambiente virtual de python en otro ambiente para otra aplicaciones pero con las mismas librerías usadas en este ambiente virtual, se puede crear un fichero con las librerías o paquetes específicos de la siguiente manera:

Crear lista de paquetes

En primera instancia se abre el ambiente virtual con . /venv/bin/activate y posteriormente se hace lo siguiente:

(venv) nuxpy@pc:~/programacion/python/miproyecto_viejo $ pip3 freeze > requerimientos.txt

Esto genera la lista de librerías o paquetes usados en este entorno virtual de python.

Instalar lista de paquetes

Una vez que se tiene el fichero con la lista de paquetes del entorno virtual previo, se crea el nuevo entorno virtual y posteriormente se hace la instalación de todos los paquetes mediante la lista creada.

Es decir, se entra en el nuevo entorno virtual:

nuxpy@pc:~/programacion/python/miproyecto_nuevo $ . /venv/bin/activate

Posteriormente se hace la instalación de los paquetes:

(venv) nuxpy@pc:~/programacion/python/miproyecto_nuevo $ pip3 install -r ../miproyecto_viejo/requerimientos.txt

Paquetes instalar o compilar

Es posible que requieran programas para realizar instalación y compilación de otros programas durante determinados momentos dentro del ambiente virtual

De los programas más importantes pudieran ser los siguientes:

python3-all-dev
libpq-dev

Es probable que estos programas se requieran instalar desde el sistema operativo.

Temas relacionados