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

Как организовать список зависимостей использующихся в проекте?

1.3 Junior🔥 81 комментариев
#Soft Skills

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

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

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

Как организовать список зависимостей используемых в проекте?

Организация зависимостей — критически важная часть управления Python проектом. Вот основные подходы:

1. requirements.txt — традиционный способ

Самый распространённый формат:

# requirements.txt
Django==4.2.0
rest-framework==3.14.0
psycopg2-binary==2.9.6
celery==5.3.1
redis==4.5.4
Python-dotenv==1.0.0
requests==2.31.0
pytest==7.3.1

Получить список установленных пакетов:

pip freeze > requirements.txt

Установить зависимости:

pip install -r requirements.txt

2. Разделение зависимостей по окружениям

Отделяй production от development:

requirements/
├── base.txt         # Общие для всех
├── dev.txt          # Для разработки
├── prod.txt         # Для production
└── test.txt         # Для тестирования

requirements/base.txt:

Django==4.2.0
rest-framework==3.14.0
psycopg2-binary==2.9.6
celery==5.3.1
redis==4.5.4

requirements/dev.txt:

-r base.txt

# Инструменты разработки
pytest==7.3.1
pytest-django==4.5.2
pytest-cov==4.1.0
black==23.3.0
flake8==6.0.0
isort==5.12.0
ipython==8.12.0

requirements/prod.txt:

-r base.txt

# Для продакшена
gunicorn==20.1.0
whitenoise==6.4.0
python-decouple==3.8

requirements/test.txt:

-r base.txt
-r dev.txt

faker==18.9.0
factory-boy==3.2.1
responses==0.23.1

Установка для разных окружений:

# Разработка
pip install -r requirements/dev.txt

# Продакшен
pip install -r requirements/prod.txt

# Тестирование
pip install -r requirements/test.txt

3. poetry — современный и рекомендуемый подход

Убирает необходимость вручную обновлять requirements:

# Инициализация
poetry init

# Добавление зависимости
poetry add django
poetry add pytest --group dev
poetry add gunicorn --group prod

pyproject.toml:

[tool.poetry]
name = "my-project"
version = "0.1.0"
description = "My Python project"

[tool.poetry.dependencies]
python = "^3.10"
django = "^4.2"
celery = "^5.3"
psycopg2-binary = "^2.9"

[tool.poetry.group.dev.dependencies]
pytest = "^7.3"
pytest-django = "^4.5"
black = "^23.3"
flake8 = "^6.0"

[tool.poetry.group.prod.dependencies]
gunicorn = "^20.1"
whitenoise = "^6.4"

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

Установка:

# Установить все зависимости
poetry install

# Установить без dev зависимостей
poetry install --no-dev

# Установить только prod группу
poetry install --only prod

4. pip-tools — для более строгого контроля версий

Создаёт requirements.txt из requirements.in:

pip install pip-tools

requirements.in:

Django==4.2.0
celery==5.3.1

Генерирование requirements.txt с точными версиями:

pip-compile requirements.in

Результат (requirements.txt) — с зависимостями зависимостей:

#
# This file is autogenerated by pip-compile with Python 3.10
#
Django==4.2.0
    # via -r requirements.in
celery==5.3.1
    # via -r requirements.in
kombu==5.3.0
    # via celery
vinyl==0.2.2
    # via kombu

5. Семантическое версионирование (Semantic Versioning)

Как указывать версии пакетов:

# Точная версия
Django==4.2.0

# Минимальная версия
Django>=4.2.0

# Версия с верхней границей
Django<5.0

# Диапазон
Django>=4.2.0,<5.0

# Совместимая версия (~=)
Django~=4.2.0  # Эквивалент >= 4.2.0, < 4.3.0

# Тильда для крупных версий
Django~=4.2     # Эквивалент >= 4.2, < 5.0

# Звездочка (не рекомендуется)
Django==4.*     # Любая версия 4.x

6. Организация в pyproject.toml (PEP 517)

Современный стандарт для упаковки:

[project]
name = "my-app"
version = "1.0.0"
description = "My awesome app"
requires-python = ">=3.10"

[project.dependencies]
django = ">=4.2,<5"
celery = "^5.3"
psycopg2-binary = "^2.9"

[project.optional-dependencies]
dev = [
    "pytest>=7.3",
    "black==23.3.0",
    "flake8==6.0",
]
prod = [
    "gunicorn>=20.1",
    "whitenoise>=6.4",
]

[tool.ruff]
line-length = 100
target-version = "py310"

Установка optional зависимостей:

pip install -e ".[dev]"
pip install -e ".[prod]"
pip install -e ".[dev,prod]"

7. Виртуальные окружения — обязательны

Изолируй зависимости проекта:

# Создание
python -m venv venv

# Активация (Linux/Mac)
source venv/bin/activate

# Активация (Windows)
venv\Scripts\activate

# Проверка
which python  # должно показать путь в venv

# Отключение
deactivate

8. Pinning versions (фиксирование версий)

Для воспроизводимости в production:

# requirements.txt с точными версиями
Django==4.2.0
celery==5.3.1
redis==4.5.4
psycopg2-binary==2.9.6
requests==2.31.0
gunicorn==20.1.0

Для разработки можно быть мягче:

Django>=4.2.0,<5.0
celery>=5.3.0,<6.0

9. Проверка устаревших зависимостей

# pip-audit — проверка уязвимостей
pip install pip-audit
pip-audit

# pip-check — проверка совместимости
pip install pip-check
pip-check

# safety — проверка базы уязвимостей
pip install safety
safety check

10. Best Practices организации

# Структура проекта
my_project/
├── requirements/
│   ├── base.txt
│   ├── dev.txt
│   ├── prod.txt
│   └── test.txt
├── pyproject.toml      # Или poetry.lock
├── poetry.lock         # Если используешь poetry
├── Makefile            # Для удобства
├── .gitignore
└── src/
    └── my_project/

Makefile для удобства:

.PHONY: install install-dev install-prod

install:
	pip install -r requirements/base.txt

install-dev:
	pip install -r requirements/dev.txt

install-prod:
	pip install -r requirements/prod.txt

freeze:
	pip freeze > requirements/base.txt

update:
	pip install --upgrade -r requirements/base.txt

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

make install-dev
make freeze
make update

Рекомендации по выбору подхода:

Маленький проект:

  • Один requirements.txt
  • pip freeze

Средний проект:

  • requirements/ папка с разделением (base, dev, prod)
  • pip freeze

Большой проект / production:

  • Poetry или pyproject.toml
  • Точные версии
  • Регулярные проверки безопасности

Enterprise решение:

  • Poetry с lock файлом
  • pip-audit для безопасности
  • Автоматизация обновлений (Dependabot)

Итог:

Оргнизация зависимостей важна для:

  • Воспроизводимости — одинаковые версии везде
  • Безопасности — контроль уязвимостей
  • Производительности — правильное окружение
  • Разработки — удобство и скорость

Выбирай подход в зависимости от размера проекта, но всегда используй виртуальные окружения и версионируй зависимости.

Как организовать список зависимостей использующихся в проекте? | PrepBro