“¿Como gestionar nuestros entornos virtuales? …” Suele ser una pregunta que nos hacemos comúnmente. Es un problema difícil de gestionar. Por suerte existen montones de soluciones disponibles para esta labor, pero no siempre son simples.

En esta entrada, la idea es introducir una herramienta que uso a diario para gestionar mis entornos virtuales y hacerlos reproducibles, algo muy útil cuando trabajamos en equipos de mas una persona.
1 ¿ Que es un entorno virtual de Python?
Un entorno virtual de Python es un -valga la redundancia-
“…entorno aislado con las dependencias particulares del proyecto…”
Esto significa que nosotros podemos manejar diferentes versiones de los mismos paquetes en nuestro sistema, pero gestionados de forma inteligente para nuestro proyecto.
Entonces, manos a la obra🫡 …
2 Preparando las cosas …
Por lo general, los pasos que voy a mostrar, son los primeros que hago cuando configuro el computador en primera instancia. Ten en cuenta que yo uso prefiero Linux para desarrollar, por lo que todos los comandos de mi blog están pensados para funcionar en Linux -distritos basadas en debian- …
Dicho lo anterior, a la acción:
Instala el gestor de paquetes de Python pip
sudo apt update && \
sudo apt install python3-pip && \
pip install --upgrade pipCon esto, garantizamos que podemos instalar una versión reciente de pipenv. Esta herramienta configura por si sola los logares donde se van a crear los diferentes entornos virtuales, personalmente a mi me gustan que cada entorno virtual se cree en la misma carpeta del proyecto, para esto agrego la siguiente linea de codigo en mi archivo .bashrc
PIPENV_VENV_IN_PROJECT=1Puedes abrir el archivo .bashrc haciendo lo siguiente
nano ~/.bashrchaz lo siguiente para recargar la shell
source ~/.bashrc¡Ahora ya estas listo para crear tu primer entorno virtual con pipenv!
3 Primeros pasos con pipenv
El flujo de trabajo es simple, vamos a suponer que quieres entrenar un modelo simple de ML con scikit-learn -recuerda que este blog trata de inteligencia artificial-
- Creamos la carpeta del proyecto
mkdir my_project- creamos una instancia virtual de pipenv
cd my_project && \
pipenv shell- instalamos las dependencias
pipenv install scikit-learn numpy pandas- creamos nuestros código –main.py–
import numpy as np
from sklearn.datasets import make_classification
from sklearn.model_selection import train_test_split
from sklearn.neural_network import MLPClassifier
from sklearn.metrics import accuracy_score
X, y = make_classification(n_samples=300, n_features=2, n_informative=2, n_redundant=0, n_clusters_per_class=1, n_classes=3)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
mlp = MLPClassifier(hidden_layer_sizes=(100,), max_iter=300, random_state=42)
mlp.fit(X_train, y_train)
y_pred = mlp.predict(X_test)
score = accuracy_score(y_test, y_pred)
print(f"Accuracy: {score:.2f}")- ejecutamos el código
python3 main.py
En todo este flujo, ocurrieron varias cosas, cuando ejecutamos el paso 2 y 3, se han creado dos archivos en nuestra carpeta
- Pipfile
- Pipfile.lock
Ambos archivos son importantes, en el Pipfile se guardan las cosas relacionadas a las dependencias, ya sean paquetes, versión de python entre otras cosas.
En nuestro caso, debería lucir algo como lo siguiente:
[[source]]
url = "https://pypi.org/simple"
verify_ssl = true
name = "pypi"
[packages]
numpy = "*"
pandas = "*"
scikit-learn = "*"
[dev-packages]
[requires]
python_version = "3.10"podemos elegir la versión de python de nuestro proyecto
durante el paso 2 deberíamos decir
pipenv --python 3.12debes tener estas versiones de python instaladas en tu sistema y en tu PATH
4 Recomendacion
Mi recomendación personal, es que entre desarrolladores se compartan ambos archivos Pipfile y Pipfile.lock para asegurar el correcto traspaso de dependencias entre todos los desarrolladores