pip vs poetry

⏱ Czas czytania: ~15 minut | 📊 Poziom: Poczatkujacy/Sredni | 📅 Aktualizacja: Styczen 2026

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.

🎯 Czego sie nauczysz:
  • 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

Aspekt pip Poetry
Instalacja Wbudowany Wymaga instalacji
Lock file ❌ Brak ✅ poetry.lock
Resolver zaleznosci Podstawowy (pip 20.3+) ✅ Zaawansowany
Virtualenv Osobne narzedzie (venv) ✅ Wbudowany
Publikowanie pakietow Wymaga twine/build ✅ Wbudowane
Plik konfiguracji requirements.txt pyproject.toml
Dev dependencies Recznie (requirements-dev.txt) ✅ Natywne grupy
Krzywa uczenia Niska Srednia
Wsparcie CI/CD Uniwersalne Wymaga setup

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
✅ Zalety pip:
  • Wszechobecny — zainstalowany domyslnie
  • Prosty — latwy do zrozumienia
  • Uniwersalny — dziala wszedzie
  • Dobrze udokumentowany — ogromna spolecznosc
❌ Wady pip:
  • Brak lock filepip freeze to 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
✅ Zalety Poetry:
  • 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)
❌ Wady Poetry:
  • 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

Narzedzie Opis Kiedy uzywac
uv Bardzo szybki (Rust), drop-in replacement dla pip Szybkosc jest priorytetem
pipenv Pipfile + lock, oficjalnie zalecany przez PyPA Jesli znasz i lubisz
pdm Podobny do Poetry, PEP 582 support Alternatywa dla Poetry
conda Pakiety binarne, data science Data science, non-Python deps
hatch Build system + env manager Publikowanie pakietow
💡 Moja rekomendacja 2026:

Dla nowych projektow zespolowychPoetry. Lock file i grupy zaleznosci to game changer dla reproducibility.

Dla prostych skryptow i szybkich prototypowpip + venv. Zero setup, dziala wszedzie.

Obserwuj uv — moze byc przyszloscia dzieki niesamowitej szybkosci.

Podsumowanie komend

Akcja pip Poetry
Instaluj zaleznosci pip install -r requirements.txt poetry install
Dodaj pakiet pip install pkg poetry add pkg
Usun pakiet pip uninstall pkg poetry remove pkg
Aktualizuj pakiet pip install -U pkg poetry update pkg
Lista pakietow pip list poetry show
Utworz venv python -m venv venv (automatycznie)
Aktywuj venv source venv/bin/activate poetry shell
Uruchom w venv python script.py poetry run python script.py
Eksportuj lock pip freeze > req.txt poetry lock
Buduj pakiet python -m build poetry build
Publikuj twine upload dist/* poetry publish

📚 Bibliografia

  1. Python Packaging Authority. (2025). pip Documentation. pip.pypa.io
  2. Poetry. (2025). Poetry Documentation. python-poetry.org/docs
  3. Python. (2025). venv Documentation. docs.python.org
  4. PyPA. (2025). Python Packaging User Guide. packaging.python.org
  5. Astral. (2025). uv – Fast Python Package Installer. github.com/astral-sh/uv