Poetry y PDM
Poetry y PDM son gestores de proyectos Python completos que manejan la resolución de dependencias, archivos de bloqueo, entornos virtuales y publicación. Ambos utilizan pyproject.toml como única fuente de verdad.
Receta
Tarjeta de referencia rápida - lista para copiar y pegar.
# Poetry
curl -sSL https://install.python-poetry.org | python3 -
poetry new myapp
poetry add fastapi pydantic
poetry run pytest
# PDM
pip install pdm
pdm init
pdm add fastapi pydantic
pdm run pytestCuándo recurrir a esto:
- El equipo ya está estandarizado en Poetry o PDM
- Necesitas flujos de trabajo de compilación y publicación integrados
- Grupos de dependencias (dev, docs, test) con garantías de archivo de bloqueo
- Migración desde
requirements.txta empaquetado moderno
Ejemplo de Trabajo
# Conceptos compartidos de pyproject.toml (Poetry o PDM)
[project]
name = "myapp"
version = "0.1.0"
requires-python = ">=3.14"
dependencies = ["fastapi>=0.115", "pydantic>=2"]
[dependency-groups]
dev = ["pytest>=8", "ruff>=0.9"]# Flujo de trabajo de Poetry
poetry install --with dev
poetry run uvicorn myapp.main:app
# Flujo de trabajo de PDM
pdm install -G dev
pdm run uvicorn myapp.main:appLo que esto demuestra:
- Ambas herramientas leen metadatos PEP 621
[project] - Los archivos de bloqueo (
poetry.lock/pdm.lock) fijan versiones exactas runejecuta comandos dentro del entorno gestionado- Los grupos de desarrollo se instalan por separado de las dependencias de producción
Inmersión Profunda
Cómo Funciona
- Poetry crea un
.venv(o usa uno existente), resuelve las dependencias, escribepoetry.locky puede compilar/publicar ruedas (wheels). - PDM soporta PEP 582 (
__pypackages__) o el tradicional.venv, resuelve a través depdm.locky sigue de cerca los estándares PEP. - Ambos resuelven dependencias transitivas y detectan conflictos antes de la instalación.
- Los archivos de bloqueo se regeneran cuando cambian las restricciones de
pyproject.toml.
Comparación de Características
| Característica | Poetry | PDM |
|---|---|---|
| Archivo de bloqueo | poetry.lock | pdm.lock |
| Ubicación de Venv | .venv (configurable) | .venv o __pypackages__ |
| Backend de compilación | poetry-core | pdm-backend |
| Publicar | poetry publish | pdm publish |
| Velocidad | Moderada | Moderada |
| Nativo PEP 621 | Sí (2.x+) | Sí |
Notas de Python
# Poetry: exportar para Docker/CI sin Poetry instalado
poetry export -f requirements.txt --output requirements.txt --without-hashes
# PDM: usar uv como backend de instalación para mayor velocidad
pdm config install.use_uv trueErrores Comunes
- Confirmar versiones diferentes del archivo de bloqueo - CI y local divergen. Solución: confirmar
poetry.lock/pdm.lock; ejecutar la instalación con el equivalente a--frozen. - Discrepancia de configuración entre Poetry 1.x y 2.x - los bloques
[tool.poetry]vs[project]difieren. Solución: migrar a la disposición PEP 621 de Poetry 2.x para proyectos nuevos. - PDM
__pypackages__e IDEs - los editores pueden no encontrar los paquetes. Solución: usar el modo.venv(pdm config python.use_venv true) para compatibilidad con IDEs. - Instalación global de herramientas en CI - lenta y sin versión fijada. Solución: usar
pipx install poetryo la Acción de GitHub oficial con una versión fijada. - Mezclar Poetry y uv en un mismo repositorio - dos archivos de bloqueo compiten entre sí. Solución: elegir una cadena de herramientas por proyecto.
Alternativas
| Alternativa | Usar Cuando | No Usar Cuando |
|---|---|---|
| uv | Proyectos nuevos, prioridad de velocidad | Mandato del equipo para Poetry |
| pip + pip-tools | Dependencias mínimas, sin paso de compilación | Árboles de dependencias complejos |
| Hatch | Compilaciones sencillas, sin resolutor | Necesitas un gestor de proyectos completo |
Preguntas Frecuentes
¿Deberían los nuevos proyectos usar Poetry o uv?
uv es más rápido y simple para la mayoría de los equipos. Elige Poetry cuando necesites su flujo de trabajo de publicación maduro y el equipo ya lo conozca.
¿Pueden Poetry y PDM leer el mismo pyproject.toml?
Ambos soportan PEP 621 [project], pero las secciones específicas de la herramienta ([tool.poetry], [tool.pdm]) difieren. Estandariza en una herramienta por repositorio.
¿Cómo funcionan los grupos de dependencias en Poetry?
[dependency-groups] (Poetry 2.x) o [tool.poetry.group.dev.dependencies] para paquetes solo de desarrollo. Instalar con poetry install --with dev.
¿Requiere PDM un venv?
No. PDM puede usar paquetes locales PEP 582. Para soporte de IDE, habilita el modo venv.
¿Cómo actualizo todas las dependencias?
Poetry: poetry update. PDM: pdm update. Ambas regeneran el archivo de bloqueo con las últimas versiones compatibles.
¿Puedo migrar desde requirements.txt?
Poetry: poetry add $(cat requirements.txt). PDM: pdm import requirements.txt. Luego confirma el archivo de bloqueo.
¿Cómo ejecuto scripts sin recordar las rutas?
Define [project.scripts] o [tool.poetry.scripts] y usa poetry run <script> o pdm run <script>.
¿Qué versiones de Python soportan?
Ambos respetan requires-python en pyproject.toml. Usa poetry env use 3.14 o pdm use 3.14 para fijar el intérprete.
¿Cómo publico en PyPI?
Poetry: poetry build && poetry publish. PDM: pdm build && pdm publish. Configura tokens a través de variables de entorno, no en archivos.
¿Son los archivos de bloqueo portátiles entre plataformas?
Mayormente sí, pero las ruedas específicas de plataforma pueden diferir. CI debe generar o verificar los archivos de bloqueo en cada sistema operativo de destino.
Relacionado
- uv - La Cadena de Herramientas Rápida - alternativa más rápida
- pyproject.toml Explicado - referencia de configuración
- Resolución de Dependencias y Archivos de Bloqueo - inmersión profunda en el fijado de versiones
- Mejores Prácticas de Entornos - convenciones de equipo
Versiones de Stack: Esta página fue escrita para Python 3.14.0, FastAPI 0.115+, Django 5.2, Flask 3.1, Pydantic 2, PyTorch 2.6+, pandas 2.2+, Polars 1.x, ruff 0.9+, y uv 0.6+.