← Назад к вопросам

Какие системы управления зависимостями (pip, poetry) использовал?

1.0 Junior🔥 271 комментариев
#Python#Инструменты разработки

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI26 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Системы управления зависимостями в Python

1. pip — встроенный менеджер пакетов

Что это: Стандартный инструмент для установки Python пакетов из PyPI (Python Package Index)

Как использовать:

# Установка пакета
pip install pandas numpy scikit-learn

# Установка конкретной версии
pip install pandas==1.5.0

# Установка диапазона версий
pip install "pandas>=1.0,<2.0"

# Установка из файла requirements.txt
pip install -r requirements.txt

# Создание requirements.txt
pip freeze > requirements.txt

Плюсы:

  • ✅ Встроен в Python (не нужно устанавливать)
  • ✅ Простой и быстрый
  • ✅ Огромное количество пакетов на PyPI
  • ✅ Хорошая документация

Минусы:

  • ❌ Не решает проблему dependency hell (разные версии разных пакетов конфликтуют)
  • ❌ Нет lock-файла (требуется pip freeze, но это ненадежно)
  • ❌ Плохо работает с virtual environments (нужно ручное управление)
  • ❌ Медленный для больших проектов

Когда использовать:

  • Учебные проекты
  • Быстрые скрипты
  • Когда вам достаточно requirements.txt

2. Poetry — современный менеджер зависимостей

Что это: Полноценная система управления зависимостями + упаковкой Python проектов

Установка и использование:

# Установка Poetry
curl -sSL https://install.python-poetry.org | python3 -

# Создание нового проекта
poetry new my_project
cd my_project

# Инициализация в существующем проекте
poetry init

# Добавление зависимостей
poetry add pandas numpy
poetry add --group dev pytest black mypy

# Установка зависимостей из pyproject.toml
poetry install

# Создание lock-файла (детерминированный)
poetry lock

# Запуск скрипта в окружении Poetry
poetry run python script.py

Файл pyproject.toml:

[tool.poetry]
name = "data-pipeline"
version = "0.1.0"
description = "ETL pipeline for data warehouse"
authors = ["John Doe <john@example.com>"]

[tool.poetry.dependencies]
python = "^3.9"  # Python 3.9 или выше
pandas = "^1.5.0"
psycopg2-binary = "2.9.6"  # Точная версия
airflow = ">=2.3,<3.0"  # Диапазон версий

[tool.poetry.group.dev.dependencies]
pytest = "^7.0"
black = "^23.0"
mypy = "^1.0"
pylint = "^2.15"

[build-system]
requires = ["poetry-core"]
build-backend = "poetry.core.masonry.api"

Плюсы:

  • ✅ Lock-файл (poetry.lock) обеспечивает reproducible installs
  • ✅ Разделение на dev и production зависимости
  • ✅ Интегрированное управление версиями проекта
  • ✅ Встроенная поддержка виртуальных окружений
  • ✅ Быстрые установки (кэширование)
  • ✅ Красивый интерфейс с информацией о конфликтах
  • ✅ Легко публиковать пакеты на PyPI

Минусы:

  • ❌ Еще относительно новый инструмент
  • ❌ Медленнее чем pip на первой установке
  • ❌ Некоторые corner case'ы с зависимостями

Когда использовать:

  • Production проекты
  • Микросервисы
  • Data engineering pipelines
  • Когда важна reproducibility

3. Pipenv — гибридный подход

Что это: Комбинация pip + virtualenv с собственным lock-файлом (Pipfile.lock)

Использование:

# Установка Pipenv
pip install pipenv

# Создание окружения и установка зависимостей
pipenv install pandas numpy

# Добавление dev зависимостей
pipenv install --dev pytest black

# Запуск в окружении Pipenv
pipenv run python script.py

# Открыть shell в окружении
pipenv shell

Файл Pipfile:

[[source]]
url = "https://pypi.org/simple"
verify_ssl = true
name = "pypi"

[packages]
pandas = "==1.5.0"
numpy = "*"

[dev-packages]
pytest = "*"
black = "*"

[requires]
python_version = "3.9"

Плюсы:

  • ✅ Lock-файл (Pipfile.lock)
  • ✅ Разделение dev/prod зависимостей
  • ✅ Хороший balance между простотой и функциональностью

Минусы:

  • ❌ Поддержка замедлилась (creator сосредоточен на Poetry)
  • ❌ Медленнее на зависимостях

Когда использовать:

  • Legacy проекты, где уже используется Pipenv
  • Когда нужна прямая поддержка virtualenv

4. Conda — для Data Science

Что это: Менеджер пакетов и окружений, специализирующийся на Data Science

Использование:

# Создание окружения с конкретной версией Python
conda create --name myenv python=3.9

# Активация окружения
conda activate myenv

# Установка пакетов
conda install pandas numpy scikit-learn

# Установка из файла
conda env create -f environment.yml

# Создание файла окружения
conda env export > environment.yml

Файл environment.yml:

name: data-pipeline
channels:
  - conda-forge
  - defaults
dependencies:
  - python=3.9
  - pandas=1.5.0
  - numpy=1.23.0
  - scikit-learn=1.2.0
  - postgresql  # Системные пакеты!
  - pip
  - pip:
    - airflow==2.3.0

Плюсы:

  • ✅ Отличная для Data Science (предкомпилированные пакеты)
  • ✅ Может устанавливать системные пакеты (postgresql, gcc)
  • ✅ Быстрые установки (binaries, не компилирование)
  • ✅ Хорошо работает с Jupyter

Минусы:

  • ❌ Большой размер (несколько GB)
  • ❌ Медленнее чем pip на установку отдельных пакетов
  • ❌ Отличается от стандартного Python ecosystem

Когда использовать:

  • Data science проекты (машинное обучение, анализ данных)
  • Когда нужны предкомпилированные пакеты
  • В research-е

5. Сравнение: что использовать?

Проект                    | Выбор      | Причина
──────────────────────────────────────────────────────────
Быстрый скрипт            | pip        | Быстро, просто
Microservice (backend)     | Poetry     | Lock-файл, reproducible
Data Pipeline (Airflow)    | Poetry     | Нужна точность зависимостей
ML/Data Science           | Conda      | Предкомпилированные пакеты
GeoSpatial анализ         | Conda      | Сложные зависимости (GDAL)
Легacy проект             | Pipenv     | Уже используется

6. Мой опыт: типичный setup

Для Data Engineering проектов:

# 1. Используем Poetry для основного кода
poetry init
poetry add airflow pandas sqlalchemy psycopg2-binary
poetry add --group dev pytest pytest-cov black mypy pylint

# 2. Для ML компонентов внутри используем Conda окружение
# (отдельное, не смешиваем)
conda create --name ml-models python=3.9
conda activate ml-models
conda install scikit-learn tensorflow

# 3. Контейнеризация (Docker)
FROM python:3.9-slim
RUN pip install poetry
COPY pyproject.toml poetry.lock /app/
WORKDIR /app
RUN poetry install --no-dev
COPY . .
CMD ["poetry", "run", "python", "main.py"]

7. Проблемы с зависимостями (Dependency Hell)

Сценарий:

Проект требует:
- pandas==1.5.0
- numpy>=1.20

А pandas==1.5.0 требует:
- numpy>=1.21.0,<2.0

Вы хотите установить numpy==1.20
результат: КОНФЛИКТ!

Решение (использование Poetry):

[tool.poetry.dependencies]
pandas = "^1.5.0"  # Автоматически resolves numpy

# Poetry решает:
# pandas: 1.5.0 -> требует numpy>=1.21,<2.0
# numpy: 1.23.5 (latest compatible)

8. Вверхние практики

# 1. НИКОГДА не используй pip freeze напрямую
# ❌ pip freeze > requirements.txt
# ✅ poetry lock (автоматический lock-файл)

# 2. Регулярно обновляй зависимости
poetry update  # Обновляет в рамках constraint-ов

# 3. Проверяй уязвимости
poetry show --outdated
# или
pip install safety
safety check

# 4. Отделяй dev от production
# ❌ pip install pytest pandas  (все вместе)
# ✅ poetry add --group dev pytest; poetry add pandas

# 5. Документируй зависимости
# pyproject.toml
[tool.poetry.dependencies]
python = "^3.9"
psycopg2-binary = "2.9.6"  # Точная версия для совместимости с SLES12

Вывод

В 2024 году:

  • Для production: Poetry (лучший modern stack)
  • Для Data Science: Conda (специализирован)
  • Для legacy: Pipenv или pip (уже используется)
  • Никогда: Только pip без lock-файла

Оптимальная стратегия: Poetry + Docker = reproducible, scalable, safe.

Какие системы управления зависимостями (pip, poetry) использовал? | PrepBro