Przenieś projekt Pythona między requirements.txt, pyproject.toml i Pipfile
Odziedziczyłeś projekt na requirements.txt, ale reszta zespołu jest na Poetry. Albo chcesz spróbować uv, który oczekuje pyproject.toml w stylu PEP 621. Albo wreszcie chcesz wyrzucić Pipenv i przejść na coś z prawdziwym lockfile. Najgorsza w tym wszystkim nie jest zmiana narzędzia, tylko 30 zależności do przepisania ręcznie tak, żeby nie zepsuć żadnego pina wersji.
To narzędzie konwertuje pliki zależności między formatami: requirements.txt, pyproject.toml (oba style: Poetry i PEP 621 używany przez uv, PDM i Hatch) oraz Pipfile. Wklejasz jedną stronę, dostajesz drugą. Konwersja w locie, nic nie ląduje na serwerze, wszystko w przeglądarce.
Parser rozumie specyfikatory wersji w każdym z ekosystemów: ^1.2.3 (Poetry caret) staje się >=1.2.3,<2.0.0 w PEP 621, ~=1.2.3 zostaje tildą, ==1.2.3 zostaje pinem. Dev dependencies są trzymane osobno, komentarze w linii (`# dev`, `# pinned for compat`) przeżywają konwersję, URL-e VCS (`git+https://...`), instalacje edytowalne (`-e .`) i markery środowiskowe (`; python_version >= "3.11"`) zostają zachowane.
Jak używać
- Wybierz format wejścia w pasku po lewej: requirements.txt, pyproject.toml albo Pipfile. Wklej swój plik w lewe pole, konwerter startuje od razu.
- Wybierz format wyjścia po prawej. Nie da się wybrać tego samego formatu po obu stronach, pasujący przycisk jest wyszarzony.
- Jeśli celujesz w pyproject.toml, wybierz styl: Poetry (używa go samo Poetry) albo PEP 621 (używa go uv, PDM, Hatch, setuptools). Te dwa mają inną strukturę i Twoje narzędzie odrzuci zły format.
- Przełącznik Grupuj zależności dev osobno trzyma paczki deweloperskie (lintery, testy) w osobnej sekcji. Parser rozpoznaje komentarze # dev w requirements, [tool.poetry.group.dev.dependencies] w Poetry, [dependency-groups].dev w PEP 621 i [dev-packages] w Pipfile.
- Przełącznik Zachowaj komentarze trzyma Twoje notatki w linii (`# pinned, see CVE-2024-...`) przyklejone do właściwej zależności.
- Przełącznik Sortuj alfabetycznie włącz, jeśli Twój zespół używa posortowanych plików zależności. Domyślnie wyłączony, żeby zachować oryginalną kolejność.
- Kopiuj wynik albo Pobierz go pod właściwą nazwą (`requirements.txt`, `pyproject.toml`, `Pipfile`).
- Zamień kierunek odwraca obie strony i podstawia obecny wynik jako nowe wejście, przydatne do sprawdzenia, czy round trip jest stabilny.
Kiedy się przydaje
Sześć sytuacji, w których wklejenie i kliknięcie wygrywa z ręcznym przepisywaniem:
- Przenosisz stary projekt na Poetry. Masz 40-liniowy requirements.txt z dwiema sekcjami # dev. Wklejasz, przełączasz wyjście na Poetry pyproject, grupa dev sama trafia do [tool.poetry.group.dev.dependencies].
- Próbujesz uv na projekcie Poetry. uv jest natywne PEP 621 i 10x szybsze od Poetry. Wklejasz Poetry pyproject.toml, przełączasz wyjście na PEP 621, dostajesz format, który uv rozumie (`[project]` + `dependency-groups`).
- Zostawiasz Pipenv za sobą. Pipfile jest na wymarciu. Konwertujesz Pipfile do pyproject.toml w dwa kliknięcia. python_version z [requires] ląduje w requires-python.
- Pipeline CI wymaga requirements.txt. Projekt jest na Poetry, ale Docker instaluje z czystego requirements.txt, żeby cache builda działał. Wklejasz plik Poetry, dostajesz requirements.txt z tymi samymi pinami, wrzucasz do repo.
- Audyt bałaganu w wersjach. Ktoś nawpisywał ^, ~, >= i bare pinów w jednym pliku. Konwertujesz do requirements.txt, żeby zobaczyć wszystkie ograniczenia w kanonicznym PEP 440 obok siebie.
- Onboarding nowej osoby. Nowy używa uv, projekt jest na Poetry. Wklejasz plik Poetry, wysyłasz wynik PEP 621, w 60 sekund osoba ma działający setup.