Entornos virtuales con Pipenv

← Dotenv para variables de entorno M茅todos de strings →
Tabla de contenido 馃搫

驴Qu茅 es un entorno virtual?

Un entorno virtual en Python es una copia de un entorno de Python ya instalado que nos permite trabajar de una forma m谩s limpia en un determinado proyecto ya que estaremos aislando un entorno para poder trabajar con los m贸dulos y librer铆as necesarias para cuyo proyecto.

En la siguiente ilustraci贸n veremos un ejemplo de como es un entorno virtual y hacernos una idea.

		
---
title: 'Esquema de Entornos Virtuales de Python'
---
graph TD
    B(Python 3.9)
    B---T[Entornos Virtuales]
    T-->C(Python 3.9)
    T-->D(Python 3.9)
    T-->E(Python 3.9)
    subgraph ''
    C-->CD[Django==2.0]
    D-->DD[Django==2.2]
    E-->ED[Django==3.2]
    end

		linkStyle default stroke: #f2f5a6
		classDef default fill:#191919,stroke:#f2f5a6,stroke-width:1px,color:#ccc
	

Creaci贸n de entornos virtuales

Cuando instalamos Python este ya viene con un m贸dulo llamado venv que permite la creaci贸n de entornos virtuales, como se mencion贸 anteriormente y vimos en la ilustraci贸n cuando se crea un entorno virtual, se crea una copia de una instalaci贸n existente de Python, conocida como base del entorno virtual de Python.

La creaci贸n de entornos virtuales se realiza ejecutando el siguiente comando:

1
python -m venv /ruta/nuevo/entorno

驴Qu茅 es Pipenv?

Pipenv es una gran herramienta que administra entornos virtuales que destaca de las otras introduciendo otras caracter铆sticas mucho m谩s flexibles.

Autom谩ticamente crea y maneja un entorno virtual para tus proyectos, tambi茅n como agregar/remover paquetes desde tu archivo Pipfile.lock, que es usado para producir un determinado build.

Pipenv est谩 destinado principalmente a proporcionar a usuarios y desarrolladores de aplicaciones un m茅todo sencillo para configurar un entorno de trabajo.

Por defecto, Pipenv guarda todos sus entornos virtuales en un solo lugar. Usualmente esto no es un problema, pero si te gustar铆a cambiarlo para comodidad de desarrollo, o si esta causando issues en servidores de construcci贸n puedes setear la variable de entorno PIPENV_VENV_IN_PROJECT para crear un entorno virtual dentro de la ra铆z de tu proyecto.

Por defecto, Pipenv inicializar谩 un proyecto usando cualquier versi贸n de python que tenga python3. Adem谩s de iniciar un proyecto con las banderas --three o --two, tambi茅n puedes setear la variable PIPENV_DEFAULT_PYTHON_VERSION para especificar cual versi贸n usa cuando se inicie un proyecto.

Instalaci贸n

Versi贸n requerida de Python:

  • PyPI - Python Version

P谩gina en pipy:

  • PyPi

En la terminal con el siguiente comando, procedemos a la instalaci贸n:

1
pip install --user pipenv

NOTA
Esto se hace para prevenir romper cualquier paquete de sistema. Si pipenv no esta disponible en tu shell despu茅s de la instalaci贸n, vas a necesitar agregar la carpeta raiz de binarios del usuario a tu PATH en mi caso (windows) C:\Users\home\AppData\Roaming\Python\Python38\Scripts

Instalaci贸n con Homebrew

Debes tener instalado Homebrew, luego ejecuta el siguiente comando en el terminal:

1
brew install pipenv

Para actualizarlo en cualquier momento, puedes ejecutar el siguiente comando:

1
brew upgrade pipenv

Administrar entornos virtuales con Pipenv

Crea un entorno virtual con la versi贸n 3 de Python:

1
pipenv install --three

Crea un entorno virtual con la versi贸n 2 de Python (debe tener instalado en su sistema python 2.x)

1
pipenv install --two

Activar un entorno virtual (si no existe, lo crea en el directorio actual)

1
pipenv shell

Salir del entorno virtual previamente activado:

1
exit

Instalar paquetes:

1
pipenv install requests

Eliminar un paquete o eliminar todos los paquetes:

1
2
pipenv uninstall django
pipenv uninstall --all

Ejecutando un script usando pipenv run:

1
pipenv run python main.py

Para evitar escribir el comando tan largo podemos activar el entorno virtual simplemente y luego ejecutar el script:

1
2
pipenv shell
python main.py

Instalar las dependencias de un archivo Pipfile:

1
pipenv install

Ejemplo de Pipfile & Pipfile.lock

Ejemplo de Pipfile:

Pipfile
1
2
3
4
5
6
7
8
9
10
11
12
[[source]]
url = "https://pypi.org/simple"
verify_ssl = true
name = "pypi"

[dev-packages]

[packages]
django = "*"

[requires]
python_version = "3.7"
  • [source]: nos muestra el enlace de donde se descargan los paquetes.
  • [dev-packages]: aqu铆 se registran las librer铆as solo para desarrollo.
  • [packages]: aqu铆 se registran todos los paquetes requeridos para el proyecto, cuando instalemos los paquetes con el comando pipenv install .

Ejemplo de Pipfile.lock:

Pipfile.lock
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
{
    "_meta": {
        "hash": {
            "sha256": "7e7ef69da7248742e869378f8421880cf8f0017f96d94d086813baa518a65489"
        },
        "pipfile-spec": 6,
        "requires": {
            "python_version": "3.7"
        },
        "sources": [
            {
                "name": "pypi",
                "url": "https://pypi.org/simple",
                "verify_ssl": true
            }
        ]
    },
    "default": {},
    "develop": {}
}

Recomendaciones generales & control de versiones

  • Generalmente, mant茅n a ambos Pipfile y Pipfile.lock en tu control de versi贸n.
  • No mantengas Pipfile.lock en tu control de version si estas usando multiples versiones de Python
  • Especifica tu versi贸n de Python en la secci贸n [requires] de tu Pipfile. En resumen, deberias tener solo una versi贸n de Python, como herramienta de desarrollo.
  • Siempre utiliza pipenv install para que se agregue a la lista de [packages] en el Pipfile.
← Dotenv para variables de entorno M茅todos de strings →