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

Как сохранить зависимости библиотек в pip?

3.0 Senior🔥 301 комментариев
#Архитектура и паттерны

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

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

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

Как сохранить зависимости библиотек в pip

Сохранение зависимостей проекта критически важно для воспроизводимости окружения. Это предотвращает ситуации, когда код работает у вас, но падает у коллеги или на сервере.

1. requirements.txt через pip freeze

# Сохранить все установленные пакеты в файл
pip freeze > requirements.txt

# Содержимое requirements.txt:
Django==4.2.0
celery==5.3.1
requests==2.31.0
psycopg2-binary==2.9.6

# Установить все зависимости
pip install -r requirements.txt

2. Ручное создание requirements.txt

# Вместо pip freeze можно написать вручную
echo 'Django==4.2.0
celery>=5.3
requests>=2.31
psycopg2-binary>=2.9' > requirements.txt

# Преимущества:
# - Контролируешь версии
# - Более гибкие версии (>=)
# - Явная информация о главных пакетах

3. Разделение по окружениям

requirements/
├── base.txt      # основные
├── dev.txt       # для разработки
└── prod.txt      # для production
# requirements/base.txt
Django==4.2.0
celery==5.3.1

# requirements/dev.txt
-r base.txt
pytest==7.3.1
black==23.3.0

# requirements/prod.txt
-r base.txt
gunicorn==20.1.0

# Использование:
pip install -r requirements/dev.txt
pip install -r requirements/prod.txt

4. pip-tools для точного контроля

# Установить pip-tools
pip install pip-tools

# Создать requirements.in
echo 'Django==4.2.0
celery>=5.3
requests' > requirements.in

# Сгенерировать requirements.txt с точными версиями
pip-compile requirements.in

# Обновить зависимости
pip-compile --upgrade requirements.in

5. pyproject.toml (современный способ)

[project]
name = "myproject"
version = "1.0.0"
requires-python = ">=3.11"

dependencies = [
    "Django==4.2.0",
    "celery>=5.3",
    "requests>=2.31",
]

[project.optional-dependencies]
dev = [
    "pytest>=7.3",
    "black>=23.3",
]

prod = [
    "gunicorn>=20.1",
]

6. Условные зависимости

# requirements.txt
Django==4.2.0
requests>=2.31

# Только для Python 3.11+
psycopg2-binary>=2.9 ; python_version >= "3.11"

# Только для Windows
pywin32>=304 ; sys_platform == "win32"

# Только для Linux
gnureadline>=8.1 ; sys_platform == "linux"

7. Локальные пакеты

# Локальный путь
-e /path/to/local/package

# Git репозиторий
-e git+https://github.com/user/repo.git#egg=package

# Определённый branch
-e git+https://github.com/user/repo.git@branch_name#egg=package

# Wheel файл
package-1.0.0-py3-none-any.whl

8. Проверка безопасности

# Установить safety
pip install safety

# Проверить уязвимости
safety check

# Или использовать pip-audit
pip install pip-audit
pip-audit
pip-audit --fix  # Автоматически обновить

9. Обновление зависимостей

# Посмотреть устаревшие пакеты
pip list --outdated

# Обновить один
pip install --upgrade Django

# Обновить все из requirements
pip install --upgrade -r requirements.txt

# Переписать requirements с новыми версиями
pip freeze > requirements.txt

10. Best practices

# Хорошо: точные версии для стабильности
Django==4.2.0
celery==5.3.1

# Хорошо: гибкие версии для транзитивных
requests>=2.31.0

# Хорошо: разделять по окружениям
requirements/base.txt
requirements/dev.txt

# Плохо: использовать latest
requests  # может сломать в любой момент

# Хорошо: коммитить в git
git add requirements.txt
git commit -m "Update dependencies"

# Плохо: не отслеживать
# Потом коллеги не смогут установить то же окружение

11. Docker

FROM python:3.11-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY . .
CMD ["python", "manage.py", "runserver"]

12. Виртуальное окружение

# Создать venv
python -m venv venv
source venv/bin/activate  # Linux/Mac
venv\\Scripts\\activate    # Windows

# Установить
pip install -r requirements.txt

# Сохранить (без пути venv)
pip freeze > requirements.txt

Рекомендуемая структура проекта

project/
├── requirements/
│   ├── base.txt
│   ├── dev.txt
│   └── prod.txt
├── pyproject.toml
├── setup.py
├── .gitignore
└── venv/

Заключение

Для сохранения зависимостей:

  • Используй pip freeze > requirements.txt для сохранения текущего состояния
  • Разделяй на base/dev/prod для разных окружений
  • Используй pyproject.toml для современных проектов
  • Коммитить зависимости в git обязательно
  • Регулярно проверяй безопасность с pip-audit или safety