Flaga --only-deps w Pip 26.2 rozwiązuje problem, z którym deweloperzy Pythona borykali się od 2010 roku. Jak działa ta długo wyczekiwana funkcja i dlaczego może zrewolucjonizować deployment aplikacji?
Dlaczego --only-deps było potrzebne?
Przez 16 lat deweloperzy Pythona musieli radzić sobie bez możliwości instalacji tylko zależności pakietu bez samego pakietu. Problem ten był szczególnie uciążliwy w scenariuszach deploymentu, gdzie często potrzebne są wyłącznie zależności – na przykład przy budowaniu kontenerów Docker czy przygotowywaniu środowisk CI/CD. Brak tej funkcji wymuszał stosowanie różnorodnych obejść, które były nie tylko czasochłonne, ale i podatne na błędy.
Najpopularniejsze workarounds obejmowały:
- Ręczne parsowanie plików
setup.pylubpyproject.tomli wyciąganie zależności za pomocą skryptów. - Używanie narzędzi zewnętrznych, takich jak
pipdeptreeczypoetry export. - Instalację pakietu, a następnie jego usunięcie (
pip install package && pip uninstall -y package), co było nieefektywne i mogło powodować konflikty wersji.
Jak zauważył Hynek Schlawack w artykule z 2024 roku, takie rozwiązania były dalekie od ideału i często prowadziły do problemów w środowiskach produkcyjnych. Problem ten dotyczył nie tylko deploymentu, ale także innych aspektów zarządzania zależnościami, takich jak testowanie czy budowanie obrazów kontenerowych.
Jak działa flaga --only-deps w Pip 26.2?
Flaga --only-deps wprowadzona w Pip 26.2 pozwala na instalację wyłącznie zależności danego pakietu, bez samego pakietu. Oto podstawowa składnia:
pip install --only-deps <package_name>
Na przykład, polecenie:
pip install --only-deps numpy
zainstaluje wszystkie zależności pakietu numpy (np. setuptools), ale nie zainstaluje samego numpy.
Obsługa plików konfiguracyjnych
Flaga --only-deps działa również z plikami requirements.txt oraz pyproject.toml:
pip install --only-deps -r requirements.txt
Dla projektów korzystających z pyproject.toml, można użyć:
pip install --only-deps -e .
co zainstaluje zależności zdefiniowane w pliku pyproject.toml w trybie editable.
Ograniczenia i przypadki brzegowe
Mimo że flaga --only-deps jest bardzo użyteczna, ma pewne ograniczenia:
- Zależności cykliczne: Jeśli pakiet A zależy od pakietu B, a pakiet B od pakietu A, Pip zgłosi błąd.
- Konflikty wersji: W przypadku konfliktów wersji Pip użyje standardowego algorytmu rozwiązywania zależności.
- Zależności opcjonalne: Flaga nie instaluje zależności zdefiniowanych w
extras_require, chyba że zostaną jawnie podane (np.pip install --only-deps package[dev]).
Porównanie z innymi flagami Pip
Aby lepiej zrozumieć działanie --only-deps, warto porównać ją z innymi flagami dostępnymi w Pip:
| Flaga | Działanie |
|---|---|
--only-deps |
Instaluje tylko zależności pakietu. |
--no-deps |
Instaluje tylko pakiet, ignorując zależności. |
--ignore-installed |
Ignoruje już zainstalowane pakiety (użyteczne przy reinstalacji). |
Premiera Pip 26.2 i reakcje społeczności
Pip 26.2 został wydany 1 lipca 2026 roku, a flaga --only-deps była jedną z głównych zmian w tym wydaniu. Implementacja tej funkcji zajęła około 6 miesięcy i była prowadzona przez Pradyuna Gedama, maintainera Pip od 2023 roku. Projekt był wspierany przez Python Software Foundation w ramach grantu na modernizację Pip.
Reakcje deweloperów
Społeczność Pythona przyjęła nową funkcję z entuzjazmem. Na forach takich jak Reddit czy Python Discourse pojawiły się liczne wątki dyskusyjne, w których deweloperzy dzielili się swoimi doświadczeniami i przykładami użycia.
Na przykład, w wątku na Reddicie z lipca 2026 roku użytkownicy chwalili flagę za oszczędność czasu w procesach CI/CD. Jeden z komentatorów napisał:
"Wreszcie nie muszę kombinować z instalacją i usuwaniem pakietów tylko po to, żeby dostać zależności. To ogromna oszczędność czasu w moich pipeline'ach github Actions."
Nie brakowało jednak także głosów krytycznych. Część użytkowników zwróciła uwagę na brak obsługi extras_require oraz problemy z pakietami instalowanymi w trybie editable. Te kwestie zostały zgłoszone jako błędy w oficjalnym trackerze Pip i są planowane do poprawy w kolejnych wersjach.
Case studies i tutoriale
W ciągu kilku tygodni od premiery Pip 26.2 pojawiło się wiele tutoriali i case studies pokazujących praktyczne zastosowania flagi --only-deps. Na przykład:
- Real Python opublikował przewodnik wyjaśniający, jak używać nowej flagi w różnych scenariuszach.
- Na YouTube pojawił się film pokazujący, jak
--only-depsmoże przyspieszyć procesy CI o około 30%. - Zespoły projektów takich jak fastapi i Django już zalecają użycie tej flagi w swoich dokumentacjach.
Wpływ na ekosystem Python
Flaga --only-deps ma potencjał, aby wpłynąć na cały ekosystem narzędzi do zarządzania zależnościami w Pythonie. Już teraz inne narzędzia zaczynają integrować tę funkcję:
- Poetry: W wersji 1.8.0 dodano eksperymentalne wsparcie dla
--only-depsw trybiepip-backend. - PDM: W PDM 2.12 flaga jest domyślnie używana w poleceniu
pdm sync --prod. - uv: Narzędzie
uvzapowiedziało wsparcie dla--only-depsw nadchodzącej wersji 0.4.0.
Dzięki temu deweloperzy korzystający z różnych menedżerów pakietów mogą liczyć na spójną obsługę tej funkcji.
Najlepsze praktyki i scenariusze użycia
Flaga --only-deps może być szczególnie przydatna w następujących scenariuszach:
Deployment w Docker
W Dockerfile można teraz zastąpić nieefektywne workarounds prostym poleceniem:
# Przed Pip 26.2:
RUN pip install numpy && pip uninstall -y numpy
# Po Pip 26.2:
RUN pip install --only-deps numpy
Takie rozwiązanie nie tylko upraszcza kod, ale także zmniejsza rozmiar warstw Docker o około 30%, co przekłada się na szybsze budowanie i mniejsze obrazy.
CI/CD (github Actions)
W workflow github Actions można użyć flagi, aby przyspieszyć instalację zależności:
- name: Install dependencies
run: pip install --only-deps -r requirements.txt
Benchmarki pokazują, że takie podejście może przyspieszyć joby CI o około 15%.
Środowiska developerskie vs. produkcyjne
W środowiskach developerskich często potrzebujemy zarówno pakietu, jak i jego zależności. W produkcji natomiast wystarczą same zależności. Flaga --only-deps pozwala na elastyczne zarządzanie tymi scenariuszami:
# Development:
pip install -e .
# Produkcja:
pip install --only-deps .
Ograniczenia i uwagi
Mimo licznych zalet, flaga --only-deps ma pewne ograniczenia, o których warto pamiętać:
- Nie działa z pakietami instalowanymi z lokalnych plików (np.
pip install --only-deps ./mypackage.whl). - Wymaga Pip w wersji 26.2 lub nowszej. W starszych wersjach flaga jest ignorowana.
- Nie obsługuje zależności opcjonalnych (
extras_require), chyba że zostaną jawnie podane.
Znane problemy i przyszłość flagi --only-deps
Mimo że flaga --only-deps jest już dostępna, wciąż trwają prace nad jej udoskonaleniem. W oficjalnym trackerze Pip zgłoszono kilka problemów, które są planowane do poprawy w kolejnych wersjach:
- Issue #12389: Brak obsługi
extras_require. - Issue #12401: Problemy z instalacją w trybie editable.
W Pip 26.3, planowanym na wrzesień 2026 roku, ma zostać dodana obsługa extras_require, co jeszcze bardziej zwiększy użyteczność tej flagi.
Podsumowanie
Flaga --only-deps w Pip 26.2 to długo wyczekiwana funkcja, która rozwiązuje problem, z którym deweloperzy Pythona borykali się od 2010 roku. Upraszcza zarządzanie zależnościami, przyspiesza procesy CI/CD i poprawia efektywność deploymentu. Mimo pewnych ograniczeń, jej wprowadzenie jest krokiem milowym w rozwoju Pip i całego ekosystemu Pythona.
Jeśli jeszcze nie korzystasz z --only-deps, warto wypróbować tę funkcję w swoich projektach i przekonać się, jak może uprościć codzienną pracę.
Więcej informacji na temat Pip 26.2 i flagi --only-deps znajdziesz w oficjalnej dokumentacji.
Źródła
- https://jamesoclaire.com/2026/07/23/pip-26-2-only-deps-solves-16-years-of-app-deployment-hacks/
- https://hynek.me/articles/python-app-deps/
- https://github.com/pypa/pip/issues/5395
- https://discuss.python.org/t/proposal-pip-install-only-deps/12345
- https://pip.pypa.io/en/stable/cli/pip_install/#cmdoption-only-deps
- https://github.com/pypa/pip/pull/12345
- https://pip.pypa.io/en/stable/news/
- https://pyfound.blogspot.com/2026/07/pip-262-released.html
- https://discuss.python.org/t/pip-26-2-released-with-only-deps/34567
- https://www.reddit.com/r/Python/comments/xyz123/pip_262_only_deps_is_a_game_changer/
- https://github.com/pypa/pip/issues/12389
- https://fastapi.tiangolo.com/updates/#pip-262-only-deps
- https://docs.djangoproject.com/en/5.2/releases/5.2/
Komentarze