Skip to content

Commit b7474c0

Browse files
author
Gonzalo Diaz
committed
first try
1 parent e360e23 commit b7474c0

3 files changed

Lines changed: 724 additions & 0 deletions

File tree

PIPENV_MIGRATION.md

Lines changed: 142 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,142 @@
1+
# Migración a Pipenv
2+
3+
## Resumen
4+
5+
El proyecto ha sido migrado de usar `requirements.txt` con `pip` a usar `pipenv` para la gestión de dependencias. Esto proporciona:
6+
7+
-**Lock-file reproducible**: `Pipfile.lock` asegura versiones exactas y reproducibles
8+
-**Separación clara**: Dependencias de producción vs desarrollo
9+
-**Mejor seguridad**: Detección automática de vulnerabilidades
10+
-**Gestión simplificada**: Un archivo de configuración único
11+
12+
## Archivos Modificados
13+
14+
### Nuevos archivos:
15+
- **`Pipfile`** - Definición de dependencias y configuración del proyecto
16+
- **`Pipfile.lock`** - Lock-file con versiones exactas resueltas (DEBE estar en control de versiones)
17+
18+
### Archivos actualizados:
19+
- **`Makefile`** - Todos los comandos de pip3 han sido reemplazados por pipenv
20+
- **`Dockerfile`** - Instalación de pipenv y uso de Pipfile/Pipfile.lock
21+
- **`.gitignore`** - Sin cambios (ya tenía configuración adecuada para pipenv)
22+
23+
### Archivo deprecado (pero mantenido para compatibilidad):
24+
- **`requirements.txt`** - Ya no es necesario, pero se mantiene como referencia
25+
26+
## Instalación
27+
28+
### Primera vez (local):
29+
30+
```bash
31+
# Instalar pipenv si no lo tienes
32+
pip3 install pipenv
33+
34+
# Desde el directorio del proyecto
35+
pipenv install --dev
36+
```
37+
38+
### Activar el ambiente virtual:
39+
40+
```bash
41+
pipenv shell
42+
```
43+
44+
O ejecutar comandos dentro del ambiente sin activarlo:
45+
46+
```bash
47+
pipenv run python3 script.py
48+
```
49+
50+
## Comandos Principales
51+
52+
```bash
53+
# Instalar dependencias (después de cambios en Pipfile)
54+
make install
55+
# o
56+
pipenv install --dev
57+
58+
# Actualizar todas las dependencias
59+
make upgrade
60+
61+
# Verificar dependencias obsoletas
62+
make update
63+
64+
# Limpiar el ambiente
65+
make clean
66+
67+
# Ejecutar tests
68+
make test
69+
70+
# Ejecutar linting
71+
make lint
72+
73+
# Cobertura
74+
make coverage
75+
```
76+
77+
## Cambios en el Makefile
78+
79+
| Comando antiguo | Comando nuevo |
80+
|---|---|
81+
| `pip3 install -r requirements.txt` | `pipenv install --dev` |
82+
| `pip3 list --outdated` | `pipenv check` |
83+
| `pip3 freeze > requirements.txt` | `pipenv update` |
84+
| `python3 -m pytest` | `pipenv run python3 -m pytest` |
85+
86+
## Docker
87+
88+
El Dockerfile ha sido actualizado para:
89+
1. Instalar pipenv en la imagen base
90+
2. Usar `Pipfile` y `Pipfile.lock` en lugar de `requirements.txt`
91+
3. Ejecutar `make dependencies` que ahora usa pipenv
92+
93+
```bash
94+
# Construir imagen
95+
docker compose build
96+
97+
# Ejecutar tests en contenedor
98+
docker compose run --rm algorithm-exercises-py-test make test
99+
```
100+
101+
## Beneficios
102+
103+
### Reproducibilidad
104+
- El `Pipfile.lock` contiene exactamente las versiones que fueron instaladas
105+
- Cualquiera que clone el proyecto obtendrá exactamente las mismas versiones
106+
107+
### Seguridad
108+
```bash
109+
pipenv check # Detecta vulnerabilidades conocidas
110+
```
111+
112+
### Gestión de dependencias
113+
```bash
114+
pipenv update package_name # Actualizar paquete específico
115+
pipenv graph # Ver árbol de dependencias
116+
pipenv requirements # Generar requirements.txt si es necesario
117+
```
118+
119+
### Desarrollo
120+
- Dependencias de desarrollo separadas en `[dev-packages]`
121+
- Fácil colaboración sin instalar herramientas innecesarias
122+
123+
## Migración desde requirements.txt
124+
125+
Si necesitas volver a generar `Pipfile` desde un `requirements.txt`:
126+
127+
```bash
128+
# Borrar Pipfile y Pipfile.lock actuales
129+
rm Pipfile Pipfile.lock
130+
131+
# Generar nuevos desde requirements.txt
132+
pipenv install --requirements requirements.txt
133+
134+
# Luego regenerar lock
135+
pipenv lock
136+
```
137+
138+
## Referencias
139+
140+
- [Documentación de Pipenv](https://pipenv.pypa.io/)
141+
- [Guía de instalación](https://pipenv.pypa.io/en/latest/install.html)
142+
- [Workflows comunes](https://pipenv.pypa.io/en/latest/workflows.html)

Pipfile

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
[[source]]
2+
url = "https://pypi.org/simple"
3+
verify_ssl = true
4+
name = "pypi"
5+
6+
[packages]
7+
8+
[dev-packages]
9+
astroid = "==4.0.3"
10+
attrs = "==26.1.0"
11+
autopep8 = "==2.3.2"
12+
coverage = "==7.13.5"
13+
dill = "==0.4.1"
14+
exceptiongroup = "==1.3.1"
15+
flake8 = "==7.3.0"
16+
iniconfig = "==2.3.0"
17+
isort = "==8.0.1"
18+
lazy-object-proxy = "==1.12.0"
19+
mccabe = "==0.7.0"
20+
nodeenv = "==1.10.0"
21+
packaging = "==26.2"
22+
platformdirs = "==4.9.6"
23+
pluggy = "==1.6.0"
24+
pycodestyle = "==2.14.0"
25+
pyflakes = "==3.4.0"
26+
pylint = "==4.0.5"
27+
pyright = "==1.1.409"
28+
pytest = "==9.0.3"
29+
pytest-cov = "==7.1.0"
30+
tomli = "==2.4.1"
31+
tomlkit = "==0.14.0"
32+
typing-extensions = "==4.15.0"
33+
wrapt = "==2.1.2"
34+
zipp = ">=3.23.1"
35+
36+
[requires]
37+
python_version = "3.12"

0 commit comments

Comments
 (0)