Zarzadzanie zaleznosciami w Pythonie to temat, ktory kazdego developera w koncu doprowadzi do frustracji. pip to klasyczne narzedzie wbudowane w Pythona, Poetry to nowoczesna alternatywa obiecujaca lepsze doswiadczenie. Ktore wybrac w 2026 roku? Ten artykul rozwieje Twoje watpliwosci.
- Kluczowe roznice miedzy pip a Poetry
- Zarzadzanie zaleznosciami i lock files
- Srodowiska wirtualne
- Publikowanie pakietow
- Praktyczne przyklady uzycia
- Kiedy wybrac ktore narzedzie
TL;DR — Szybkie porownanie
pip — klasyk
pip (Pip Installs Packages) to domyslny menedzer pakietow Pythona, dostepny od Python 3.4. Jest prosty, wszechobecny i dobrze udokumentowany.
Instalacja pakietow
# Instalacja pojedynczego pakietu
pip install requests
# Instalacja konkretnej wersji
pip install requests==2.31.0
# Instalacja z ograniczeniem wersji
pip install "requests>=2.28,<3.0"
# Instalacja z pliku requirements.txt
pip install -r requirements.txt
# Instalacja w trybie editable (development)
pip install -e .
# Upgrade pakietu
pip install --upgrade requests
# Instalacja z dodatkowych zrodel
pip install --index-url https://pypi.company.com/simple/ package-name
requirements.txt
# requirements.txt - lista zaleznosci
requests==2.31.0
pydantic>=2.0,<3.0
langchain~=0.1.0 # compatible release (0.1.x)
openai
python-dotenv
# Zaleznosci z git
git+https://github.com/user/repo.git@main
# Lokalna sciezka
-e ./my-local-package
Srodowisko wirtualne z venv
# Utworzenie srodowiska wirtualnego
python -m venv venv
# Aktywacja (Linux/macOS)
source venv/bin/activate
# Aktywacja (Windows)
venv\Scripts\activate
# Instalacja zaleznosci w venv
pip install -r requirements.txt
# Eksport zainstalowanych pakietow
pip freeze > requirements.txt
# Deaktywacja
deactivate
Przydatne komendy
# Lista zainstalowanych pakietow
pip list
# Sprawdz czy sa dostepne aktualizacje
pip list --outdated
# Informacje o pakiecie
pip show requests
# Usun pakiet
pip uninstall requests
# Sprawdz zaleznosci pakietu
pip show requests | grep Requires
# Wyszukaj pakiety
pip search requests # (wylaczone na PyPI, uzyj pypi.org)
# Sprawdz problemy z zaleznosciami
pip check
- Wszechobecny — zainstalowany domyslnie
- Prosty — latwy do zrozumienia
- Uniwersalny — dziala wszedzie
- Dobrze udokumentowany — ogromna spolecznosc
- Brak lock file —
pip freezeto nie to samo - Resolver konfliktow — lepszy niz kiedys, ale nie idealny
- Brak grup zaleznosci — dev vs prod recznie
- Venv osobno — wymaga dodatkowych krokow
Poetry — nowoczesnosc
Poetry to nowoczesny menedzer zaleznosci i pakietow dla Pythona. Laczy zarzadzanie zaleznosciami, srodowiskami wirtualnymi i publikowaniem w jednym narzedziu.
Instalacja Poetry
# Oficjalny instalator (zalecany)
curl -sSL https://install.python-poetry.org | python3 -
# Lub przez pipx (izolowany)
pipx install poetry
# Sprawdz instalacje
poetry --version
# Konfiguracja - virtualenv w projekcie (zalecane)
poetry config virtualenvs.in-project true
# Wlacz tab completion (bash)
poetry completions bash >> ~/.bash_completion
Tworzenie nowego projektu
# Nowy projekt od zera
poetry new my-project
cd my-project
# Struktura:
# my-project/
# ├── pyproject.toml
# ├── README.md
# ├── my_project/
# │ └── __init__.py
# └── tests/
# └── __init__.py
# Inicjalizacja w istniejacym katalogu
cd existing-project
poetry init # interaktywny kreator
# Lub nieinteraktywnie
poetry init -n
pyproject.toml
# pyproject.toml - standardowy plik konfiguracji Python
[tool.poetry]
name = "my-project"
version = "0.1.0"
description = "My awesome project"
authors = ["Jan Kowalski " ]
readme = "README.md"
license = "MIT"
repository = "https://github.com/user/my-project"
keywords = ["ai", "agents", "python"]
[tool.poetry.dependencies]
python = "^3.10" # wymagana wersja Pythona
requests = "^2.31.0" # ^2.31.0 = >=2.31.0 <3.0.0
pydantic = ">=2.0,<3.0"
langchain = "~0.1.0" # ~0.1.0 = >=0.1.0 <0.2.0
openai = "*" # dowolna wersja
# Opcjonalne zaleznosci
fastapi = {version = "^0.100", optional = true}
[tool.poetry.group.dev.dependencies]
# Zaleznosci developerskie (nie trafiaja do produkcji)
pytest = "^8.0"
pytest-cov = "^4.0"
black = "^24.0"
ruff = "^0.2"
mypy = "^1.8"
[tool.poetry.group.docs.dependencies]
# Osobna grupa dla dokumentacji
mkdocs = "^1.5"
mkdocs-material = "^9.0"
[tool.poetry.extras]
# Extras (instalowane przez: pip install my-project[api])
api = ["fastapi"]
[tool.poetry.scripts]
# CLI commands
my-cli = "my_project.cli:main"
[build-system]
requires = ["poetry-core"]
build-backend = "poetry.core.masonry.api"
Zarzadzanie zaleznosciami
# Dodaj zaleznosc (automatycznie aktualizuje pyproject.toml i poetry.lock)
poetry add requests
poetry add "pydantic>=2.0"
# Dodaj zaleznosc dev
poetry add pytest --group dev
poetry add black ruff --group dev
# Dodaj z git
poetry add git+https://github.com/user/repo.git
# Dodaj lokalna sciezke
poetry add ../my-local-package
# Usun zaleznosc
poetry remove requests
# Aktualizuj zaleznosci
poetry update # wszystkie
poetry update requests # konkretna
# Pokaz drzewo zaleznosci
poetry show --tree
# Sprawdz nieaktualne pakiety
poetry show --outdated
Srodowisko wirtualne
# Instalacja zaleznosci (tworzy venv automatycznie)
poetry install
# Instalacja bez dev dependencies
poetry install --without dev
# Instalacja tylko wybranych grup
poetry install --only main
# Aktywuj shell w virtualenv
poetry shell
# Lub uruchom komende w venv bez aktywacji
poetry run python my_script.py
poetry run pytest
poetry run black .
# Informacje o srodowisku
poetry env info
# Lista srodowisk
poetry env list
# Usun srodowisko
poetry env remove python3.10
poetry.lock — serce Poetry
# poetry.lock zawiera DOKLADNE wersje wszystkich zaleznosci
# (wlacznie z zaleznosciami posrednimi)
# Przyklad fragmentu poetry.lock:
[[package]]
name = "requests"
version = "2.31.0"
description = "Python HTTP for Humans."
python-versions = ">=3.7"
[package.dependencies]
certifi = ">=2017.4.17"
charset-normalizer = ">=2,<4"
idna = ">=2.5,<4"
urllib3 = ">=1.21.1,<3"
# ZAWSZE commituj poetry.lock do repo!
# Gwarantuje reproducibility - kazdy dostanie te same wersje
Publikowanie pakietow
# Budowanie pakietu
poetry build
# Tworzy:
# dist/my_project-0.1.0.tar.gz
# dist/my_project-0.1.0-py3-none-any.whl
# Publikacja na PyPI
poetry publish
# Build + publish jednym poleceniem
poetry publish --build
# Publikacja na prywatne repo
poetry config repositories.private https://pypi.company.com/simple/
poetry publish -r private
# Podbij wersje
poetry version patch # 0.1.0 -> 0.1.1
poetry version minor # 0.1.0 -> 0.2.0
poetry version major # 0.1.0 -> 1.0.0
- Lock file — gwarantuje reproducibility
- Resolver — inteligentne rozwiazywanie konfliktow
- Wszystko w jednym — venv, deps, build, publish
- Grupy zaleznosci — dev, docs, test osobno
- pyproject.toml — standardowy format (PEP 518)
- Wymaga instalacji — nie jest wbudowany
- Wolniejszy resolver — przy duzych projektach
- Krzywa uczenia — nowe komendy i koncepty
- CI/CD setup — wymaga dodatkowej konfiguracji
Porownanie workflow
pip workflow:
# 1. Utworz venv
python -m venv venv
source venv/bin/activate
# 2. Zainstaluj zaleznosci
pip install -r requirements.txt
# 3. Dodaj nowa zaleznosc
pip install new-package
echo "new-package==1.0.0" >> requirements.txt
# 4. Eksportuj dokladne wersje
pip freeze > requirements-lock.txt
Poetry workflow:
# 1. Zainstaluj (venv tworzony automatycznie)
poetry install
# 2. Dodaj nowa zaleznosc (pyproject.toml i poetry.lock aktualizowane automatycznie)
poetry add new-package
# 3. Uruchom kod
poetry run python my_script.py
CI/CD
GitHub Actions z pip
# .github/workflows/test.yml
name: Test
on: [push, pull_request]
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: '3.11'
cache: 'pip'
- name: Install dependencies
run: |
pip install -r requirements.txt
pip install -r requirements-dev.txt
- name: Run tests
run: pytest
GitHub Actions z Poetry
# .github/workflows/test.yml
name: Test
on: [push, pull_request]
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: '3.11'
- name: Install Poetry
uses: snok/install-poetry@v1
with:
virtualenvs-create: true
virtualenvs-in-project: true
- name: Cache dependencies
uses: actions/cache@v4
with:
path: .venv
key: venv-${{ hashFiles('poetry.lock') }}
- name: Install dependencies
run: poetry install --no-interaction
- name: Run tests
run: poetry run pytest
Migracja pip → Poetry
# 1. Zainstaluj Poetry
curl -sSL https://install.python-poetry.org | python3 -
# 2. Zainicjuj projekt
cd my-project
poetry init -n
# 3. Dodaj zaleznosci z requirements.txt
# (Mozna recznie lub skryptem)
cat requirements.txt | xargs poetry add
# Lub dla kazdej linii osobno:
while read requirement; do
poetry add "$requirement"
done < requirements.txt
# 4. Stworz lock file
poetry lock
# 5. Przetestuj
poetry install
poetry run pytest
# 6. Usun stare pliki (opcjonalnie)
rm requirements.txt requirements-dev.txt
Kiedy wybrac co?
📦 Wybierz pip gdy:
- Prosty projekt / skrypt
- Brak potrzeby lock file
- Srodowisko z ograniczeniami (Docker minimal)
- Zespol nie zna Poetry
- Maksymalna kompatybilnosc
- Legacy projekty
🚀 Wybierz Poetry gdy:
- Projekt zespolowy
- Potrzebujesz reproducibility
- Planujesz publikowac pakiet
- Zlozne zaleznosci (grupy dev/test/docs)
- Nowy projekt od zera
- Caly zespol moze sie nauczyc
Alternatywy warte uwagi
Dla nowych projektow zespolowych — Poetry. Lock file i grupy zaleznosci to game changer dla reproducibility.
Dla prostych skryptow i szybkich prototypow — pip + venv. Zero setup, dziala wszedzie.
Obserwuj uv — moze byc przyszloscia dzieki niesamowitej szybkosci.
Podsumowanie komend
📚 Bibliografia
- Python Packaging Authority. (2025). pip Documentation. pip.pypa.io
- Poetry. (2025). Poetry Documentation. python-poetry.org/docs
- Python. (2025). venv Documentation. docs.python.org
- PyPA. (2025). Python Packaging User Guide. packaging.python.org
- Astral. (2025). uv – Fast Python Package Installer. github.com/astral-sh/uv