Introducción
Configurar un entorno es el primer paso en el desarrollo con Python y es crucial porque la administración de paquetes puede ser un desafío con Python. Python es un lenguaje flexible que se puede aplicar en varios dominios, incluida la programación científica, DevOps, automatización y desarrollo web. Dada la variedad y cantidad de aplicaciones de terceros, su entorno global se convertirá en un desastre inflado en muy poco tiempo.
Es un hecho bien conocido en la comunidad de desarrolladores que en Python es complicado administrar paquetes. Si hay un meme que lo resuma, sería este:
Entonces, ¿cuál es la solución a esto? Bueno, para evitar cualquier peligro relacionado con la gestión de dependencias, se utilizan entornos virtuales. Los entornos virtuales son imprescindibles si se está realizando algún desarrollo en Python.
Hay muchas herramientas de entorno virtual, cada una con características únicas. En este artículo, analizaremos algunos de los entornos de Python más populares, sus características únicas y sus deficiencias, y también aprenderemos a configurar entornos virtuales con esas herramientas.
Según nuestras preferencias, se puede utilizar cualquiera de estas herramientas para configurar un entorno de desarrollo. Pero antes, veamos algunos beneficios del uso de entornos virtuales.
Tabla de contenido
- ¿Por qué utilizar entornos virtuales?
- Herramientas para la gestión de entornos virtuales
- Python venv
- Pyenv + direnv
- Configuración de direnv
- Pipenv
- Poetry
¿Por qué utilizar entornos virtuales?
Hay varios beneficios de usar entornos virtuales:
- Gestión de dependencias: Administrar paquetes mientras se construye cualquier cosa puede ser más complicado. Los entornos de desarrollo pueden facilitar la administración de paquetes. Podemos mencionar explícitamente las versiones de las bibliotecas, y el entorno de desarrollo se asegurará de que las dependencias estén instaladas y configuradas.
- Reproducibilidad: Los entornos virtuales facilitan la recreación del mismo entorno de desarrollo en varias máquinas. Garantiza que todos los colaboradores del proyecto utilicen las mismas dependencias y herramientas. Por lo tanto, reduce los riesgos de descifrar códigos y errores.
- Depuración: Al aislar el entorno, puede identificar más fácilmente qué paquetes o configuraciones están causando problemas y abordarlos sin afectar otras partes del sistema.
- Seguridad: Aislar los entornos de desarrollo garantizará que ninguna vulnerabilidad de seguridad afecte a otras partes del sistema.
- Aislamiento: El código está aislado del entorno global. Los paquetes que se instalen permanecerán dentro del entorno virtual. Por lo tanto, no se contaminará el entorno global de Python. Linux y Mac vienen con una instalación predeterminada de Python y paquetes relacionados, instalar paquetes directamente podría generar problemas con los que no deseamos lidiar. Por lo tanto, es crucial usar dependencias virtuales para aislar diferentes instalaciones.
En general, es crucial usar entornos virtuales para crear un espacio consistente, estable y seguro para el desarrollo de software.
Hay muchas herramientas para administrar entornos virtuales en Python. En este artículo, discutiremos algunas de las herramientas de entorno virtual más utilizadas, como,
- Python venv
- Pipenv
- Pyenv
- Poetry
Entorno Python venv
Python venv es la herramienta de entorno virtual más popular que existe. Viene con la instalación de Python3. Entonces, si estás utilizando Python3, no necesitas instalar nada, venv ayuda a crear entornos virtuales ligeros, venv simplifica la creación y administración de entornos.
Para crear un entorno virtual:
python -m venv <env name>
Activar entorno:
source <path to env folder>/bin/activate
Una vez activado, se puede instalar cualquier paquete usando pip. Para ver los paquetes instalados y sus versiones escribe:
pip freeze
Guárdalo como un tipo de archivo de texto:
pip freeze > requirements.txt
Para cerrar el entorno, escribe el comando para desactivar.
deactivate
Pyenv
Hay ocasiones en las que necesitas varias instalaciones de Python en el sistema. Por ejemplo, cuando necesitas probar si una característica funciona en diferentes versiones de Python, pero la instalación de múltiples versiones de Python podría romper el código existente, lo que nadie quiere. La mejor solución es utilizar una herramienta como Pyenv. Pyenv permite instalar diferentes versiones de Python en el sistema sin causar disputas.
Instalar y configurar Pyenv puede ser un poco complicado. Pyenv requiere que se instalen algunas dependencias a medida que se compila desde la fuente. Si estámos en Ubuntu/Debian, ejecuta el siguiente comando:
sudo apt-get install -y make build-essential libssl-dev zlib1g-dev \
libbz2-dev libreadline-dev libsqlite3-dev wget curl llvm libncurses5-dev \
libncursesw5-dev xz-utils tk-dev libffi-dev liblzma-dev python-openssl
Para CentOS/Fedora/RHEL:
sudo yum install gcc zlib-devel bzip2 bzip2-devel readline-devel sqlite \
sqlite-devel openssl-devel xz xz-devel libffi-devel
Ahora, estás listo para instalar Pyenv:
curl pyenv.run | bash
Ahora, agrega Pyenv a la ruta en el archivo .bashrc. Abre el archivo usando cualquier editor que desees. Usaremos “vi” para abrir y editar el archivo:
vi ~/.bashrc
Escribe la letra “o” para ingresar al modo INSERTAR. Ahora, copia y pegua el siguiente código y reinicia el shell:
export PYENV_ROOT="$HOME/.pyenv"
export PATH="$PYENV_ROOT/bin:$PATH"
eval "$(pyenv init --path)"
eval "$(pyenv init -)"
eval "$(pyenv virtualenv-init -)"
Ahora puedes instalar cualquier versión específica de Python en tu sistema.
pyenv install python 3.8.15
Consulta las versiones de Python en tu sistema:
$ pyenv versions
* system (set by /home/sunil/.pyenv/version)
3.8.15
3.10.4
Puedes ver que tenemos dos versiones diferentes de Python instaladas. También puedes configurar tus entornos globales y locales de Python ejecutando el siguiente comando:
$ pyenv global 3.8.15
$ python --version
Python 3.8.15
Configuración de direnv
direnv es una de esas herramientas que puede mejorar tu productividad como desarrollador de Python. Recuerda, ¿cuántas veces te has olvidado de activar el entorno virtual y empezar a ejecutar códigos? Bueno, creo que nos ha pasado a la mayoría de nosotros. Aquí es donde entra en juego direnv. Con Pyenv y direnv configurados, no se necesita activar el entorno virtual de forma explícita, direnv se encargará de esto.
Entonces, ¿cómo configuramos direnv para nuestro entorno?
Comencemos instalando direnv. Para instalar en un tipo de distribución Debian/Ubuntu:
sudo apt-get direnv
Si usas el tipo de distribución basado en Fedora/CentOS/RedHat:
sudo dnf install direnv
Ahora, agrega este archivo al archivo .bashrc:
eval "$(direnv hook bash)"
Agrega un nuevo archivo llamado .direnvrc en la carpeta de inicio (~) con este contenido:
use_python() {
local python_root=$(pyenv root)/versions/$1
load_prefix "$python_root"
if [[ -x "$python_root/bin/python" ]]; then
layout python "$python_root/bin/python"
else
echo "Error: $python_root/bin/python can't be executed."
exit
fi
}
Crea un entorno virtual para tu proyecto agregando un archivo llamado .envrc en la carpeta principal del repositorio del proyecto con este contenido:
use python 3.10.4 #or any version you have installed in pyenv
Ahora escribe:
direnv allow
Reinicia o crea un nuevo shell y ejecuta un “cd” en él. Tu entorno virtual se encenderá automáticamente. Verás algo como esto:
source "/home/sunil/Django/Feed App/.direnv/python-3.10.4/bin/activate"
direnv: loading ~/Django/Feed App/.envrc
direnv: using python 3.10.4
direnv: export +CPATH +LD_LIBRARY_PATH +LIBRARY_PATH +MANPATH +PKG_CONFIG_PATH +VIRTUAL_ENV ~PATH
Para desactivar el entorno, sal del directorio de tu proyecto.
Entorno Python Pipenv
El próximo candidato en esta lista es Pipenv. Pipenv intenta traer lo mejor de todos los administradores de paquetes como yarn, npm, cargo, composer, etc. Una de las ventajas de usar Pipenv es que no necesita usar pip y venv por separado.
Aparte de esto, Pipenv tiene como objetivo resolver varios problemas utilizando archivos requirements.txt, como dependencias anidadas o paquetes con múltiples subdependencias, que pueden causar errores más adelante al recrear el entorno del código.
Pipenv usa archivos pipfile y pipfile.lock para resolver problemas relacionados con dependencias complejas. Un pipfile se genera automáticamente cuando se crea un entorno virtual con Pipenv. Es similar a un archivo requirements.txt. Es un archivo de especificación de alto nivel para el proyecto y se actualiza en tiempo real. El archivo de bloqueo pipfile especifica las versiones exactas de las dependencias. El archivo de bloqueo garantiza que los paquetes instalados sean de las mismas versiones en todos los sistemas.
La configuración es fácil, instala Pipenv a través de pip:
pip install pipenv
Si estás recreando un entorno, escribe:
pipenv install
Esto instalará todas las dependencias enumeradas en el archivo de bloqueo en un entorno virtual. Para activar el tipo de shell:
pipenv shell
Para salir del shell, escribe exit. Otra característica que hace de Pipenv una mejor opción es que puedes ver el gráfico de dependencia de los paquetes instalados. Para ver el tipo de gráfico de dependencia, “pipenv graph”:
(temp) [[email protected] temp]$ pipenv graph
numpy==1.24.2
requests==2.28.2
- certifi [required: >=2017.4.17, installed: 2022.12.7]
- charset-normalizer [required: >=2,<4, installed: 3.0.1]
- idna [required: >=2.5,<4, installed: 3.4]
- urllib3 [required: >=1.21.1,<1.27, installed: 1.26.14]
Para saber más sobre Pipenv, echa un vistazo a su documentación oficial.
Entorno Python Poetry
Poetry es otra herramienta moderna de Python para la gestión de dependencias y el empaquetado de archivos de Python.
Proporciona una forma unificada de administrar, crear versiones, empaquetar y publicar paquetes de Python. Así como venv usa requirements.txt y Pipenv usa Pipfile .lock, Poetry usa pyproject.toml para fijar dependencias. Poetry usará el archivo pyproject.toml para resolver dependencias.
Para instalar Poetry, ejecuta el siguiente script:
curl -sSL https://install.python-poetry.org | POETRY_HOME=/etc/poetry python3 -
Para comenzar un nuevo proyecto con Poetry, ejecuta el siguiente script:
poetry new project
Esto creará el directorio del proyecto con la siguiente estructura de carpetas:
.
├── project
│ └── __init__.py
├── pyproject.toml
├── README.md
└── tests
└── __init__.py
Como puedes ver, la carpeta del proyecto con el archivo __init__.py, tiene un archivo pyproject.toml para crear dependencias, un archivo README.md para especificar información sobre el proyecto y un directorio de prueba para pruebas unitarias.
Un archivo de proyecto Py (ver más abajo) consta de tres secciones, la primera sección ([tool. poetry]) contiene información general. La segunda parte ([tool. poetry. dependencies]) fija la versión y las dependencias de Python. Y la sección final ([build-system]) especifica el sistema de compilación. Consulta la documentación oficial para obtener información al respecto:
[tool.poetry]
name = "myproject"
version = "0.1.0"
description = ""
authors = ["sunilkumardash9 <[email protected]>"]
readme = "README.md"
[tool.poetry.dependencies]
python = "^3.10"
requests = "^2.28.2"
[build-system]
requires = ["poetry-core"]
build-backend = "poetry.core.masonry.api"
La instalación de una biblioteca es sencilla. Si estás construyendo desde un repositorio con un archivo de proyecto py, Poetry instalará las dependencias que se refieren al archivo de proyecto py:
#installing a single library
poetry add requests.py
#installing dependencies from pyproject.toml
poetry install -
Se generará automáticamente un archivo de bloqueo (lock) de Poetry y se agregará al directorio del proyecto. Una vez creado este archivo, en la próxima instalación de dependencias con Poetry, se instalarán las versiones específicas de las dependencias que se encuentren en el archivo lock.
Para ejecutar un script, puedes usar el siguiente comando de Poetry:
poetry run python main.py
Por ejemplo, crea un archivo main.py en el directorio de tu proyecto y agréguale estas líneas:
import requests
# Make an HTTP GET request to the API
response = requests.get('https://api.ipify.org')
# Get the IP address from the response text
ip_address = response.text.strip()
print(f"External IP Address: {ip_address}")
Ahora, ejecuta el archivo usando el comando anterior para obtener el resultado.
Si no deseas utilizar el comando Poetry para ejecutar archivos, activa un entorno virtual con la consola de comandos de Poetry. Esto iniciará un entorno virtual y podrás trabajar en él como de costumbre.
Conclusión
Desarrollar dentro de un entorno virtual hará que tu código sea estable, consistente y confiable durante todo el ciclo de vida del desarrollo del producto. Es una de las partes más integrales de la vida de un desarrollador de Python. Si un proyecto ya utiliza una herramienta de entorno virtual, sería mejor seguir con eso. Pero si estás comenzando un nuevo proyecto, será mejor ir con Pipenv y Poetry.
Para resumir, estos son los puntos clave del artículo:
- Aprendimos los beneficios de usar entornos virtuales.
- Aprendimos sobre las características distintivas de las herramientas populares del entorno Python como venv, Pyenv, Pipenv y Poetry.
- También aprendimos a crear y administrar entornos virtuales utilizando estas herramientas.