← Назад к вопросам
Как сохранить зависимости библиотек в 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