Mueve un proyecto Python entre requirements.txt, pyproject.toml y Pipfile
Has heredado un proyecto que usa requirements.txt pero el resto del equipo va en Poetry. O quieres probar uv, que espera pyproject.toml estilo PEP 621. O por fin quieres dejar Pipenv atrás y publicar con un lockfile en condiciones. La parte molesta nunca es el gestor: son las 30 dependencias que tienes que reescribir a mano sin cargarte un pin de versión.
Esta herramienta convierte archivos de dependencias entre formatos: requirements.txt, pyproject.toml (estilo Poetry y estilo PEP 621 usado por uv, PDM y Hatch) y Pipfile. Pegas un lado y obtienes el otro. Conversión en vivo, sin subir nada, sin que nada salga de tu navegador.
El parser entiende los especificadores de versión de cada ecosistema: ^1.2.3 (caret de Poetry) se convierte en >=1.2.3,<2.0.0 en PEP 621, ~=1.2.3 sigue siendo tilde y ==1.2.3 sigue pineado. Las dependencias dev quedan separadas, los comentarios inline (`# dev`, `# pineado por compatibilidad`) hacen round-trip, las URLs VCS (`git+https://...`), las instalaciones editables (`-e .`) y los markers de entorno (`; python_version >= "3.11"`) se preservan.
Cómo se usa
- Elige el formato de entrada en la barra superior izquierda: requirements.txt, pyproject.toml o Pipfile. Pega tu archivo en el textarea izquierdo y el conversor arranca al instante.
- Elige el formato de salida a la derecha. No puedes elegir el mismo formato a ambos lados; el botón correspondiente queda en gris.
- Si exportas a pyproject.toml, elige el estilo: Poetry (que usa el propio Poetry) o PEP 621 (usado por uv, PDM, Hatch, setuptools). Están estructurados distinto y tu tooling rechazará el incorrecto.
- Activa Agrupar deps dev por separado para mantener los paquetes de desarrollo (linters, test runners) en su sección. El parser reconoce los comentarios # dev en requirements, [tool.poetry.group.dev.dependencies] en Poetry, [dependency-groups].dev en PEP 621 y [dev-packages] en Pipfile.
- Activa Preservar comentarios para mantener tus notas inline (`# pineado, ver CVE-2024-...`) pegadas a la dependencia correcta.
- Activa Ordenar alfabéticamente si tu equipo usa archivos ordenados. Desactivado por defecto para que sobreviva tu orden original.
- Copia el resultado o descárgalo con el nombre adecuado (`requirements.txt`, `pyproject.toml`, `Pipfile`).
- Invertir dirección intercambia los dos lados y mete la salida actual como nueva entrada: útil para comprobar un round-trip.
Cuándo te resulta útil
Seis situaciones en las que pegar y pulsar gana a reescribir a mano:
- Mover un proyecto viejo a Poetry. Tienes un requirements.txt de 40 líneas con dos secciones # dev. Lo pegas, cambias a Poetry pyproject y el grupo dev aterriza automáticamente en [tool.poetry.group.dev.dependencies].
- Probar uv en un proyecto Poetry existente. uv es nativo de PEP 621 y 10x más rápido que Poetry. Pegas tu pyproject.toml de Poetry, cambias la salida a PEP 621 y obtienes el formato que espera uv (`[project]` + `dependency-groups`).
- Dejar Pipenv atrás. Pipfile se está muriendo. Conviertes tu Pipfile a pyproject.toml en dos clics. La python_version de [requires] aterriza en requires-python.
- Pipelines CI que necesitan requirements.txt. Tu proyecto usa Poetry, pero tu imagen Docker instala desde un `requirements.txt` plano por caching. Pegas el archivo de Poetry, obtienes requirements.txt con los mismos pins y lo metes.
- Auditar un lío de versionado. Alguien escribió ^, ~, >= y pins pelados en el mismo archivo. Convierte a requirements.txt para ver todas las restricciones en la forma canónica PEP 440 una al lado de otra.
- Aterrizar a un dev nuevo. El recién llegado usa uv, el proyecto usa Poetry. Pegas el archivo de Poetry, le mandas la salida PEP 621 y queda desbloqueado en 60 segundos.