JavaRush /Курсы /Модуль 3: Django /Управление зависимостями проекта

Управление зависимостями проекта

Модуль 3: Django
2 уровень , 8 лекция
Открыта

Команда разработчиков, работающая над проектом, использует множество библиотек. Некоторые из них регулярно обновляются, другие уже устарели, а третьи вдруг решают, что больше не хотят дружить с Python 3.10, который вы только что настроили. Управление зависимостями помогает сохранить проект в рабочем состоянии, несмотря на всё происходящее в мире.

1. Основы управления зависимостями

В мире Python зависимости — это внешние библиотеки и модули, которые используются в проекте. Например, для Django-проекта минимальная зависимость — это сам Django. У вас могут быть и другие зависимости, такие как:

  • requests — для работы с HTTP-запросами.
  • pillow — для обработки изображений.
  • django-rest-framework — для создания API.

Если представить проект как крутое блюдо, то зависимости — это ингредиенты. Неправильное количество соли (неподходящая версия библиотеки) или отсутствие чеснока (забытая установка пакета) может всё разрушить.

Зачем управлять зависимостями?

  1. Предсказуемость: вы уверены, что проект будет работать одинаково на всех устройствах команды, на тестовых и продакшен-серверах.

  2. Cтабильность: если одна из зависимостей обновится до несовместимой версии, это не сломает ваш проект (по крайней мере, в теории).

  3. Легкость развертывания: новый разработчик или сервер сможет быстро настроить среду, идеально подходящую для проекта.

2. Использование файла requirements.txt

Файл requirements.txt — это стандартный способ фиксирования всех зависимостей проекта. Он содержит список библиотек и их версий. Пример файла:

Django==5.1.3
requests==2.28.1
pillow==9.3.0

Создание файла requirements.txt

Уже установили несколько библиотек в виртуальном окружении? Отлично! Давайте создадим файл requirements.txt. Запустите следующую команду:

pip freeze > requirements.txt

Эта команда создаст файл и добавит в него все зависимости, которые сейчас установлены в вашем окружении.

Установка зависимостей из requirements.txt

Если вы или кто-то из вашей команды хочет установить зависимости, указанные в requirements.txt, просто выполните:

pip install -r requirements.txt

Эта команда пройдётся по списку и установит указанные библиотеки.

Указание версий

Обратите внимание, что мы фиксируем версии библиотек. Например, Django==4.2.3 означает, что будет установлена строго указанная версия Django. Но вы можете быть немного гибче:

  • django>=4.2.0 — установить версию не ниже 4.2.0.
  • django<5.0.0 — установить любую версию до 5.0.0.
  • django~=4.2.0 — установка совместимых версий, то есть 4.2.x, где x >= 0.

Как правило, фиксирование конкретных версий — это безопасный подход, особенно для продакшена.

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

Хотите обновить все зависимости, указанные в requirements.txt? Для этого используйте команду:

pip install --upgrade -r requirements.txt

После обновления рекомендуется снова выполнить pip freeze > requirements.txt, чтобы записать актуальные версии библиотек.

3. Инструменты для управления зависимостями

3.1. Pipenv

Pipenv — это инструмент, который объединяет управление зависимостями и виртуальными окружениями. Он упрощает работу благодаря двум файлам: Pipfile и Pipfile.lock.

Для начала установите Pipenv:

pip install pipenv

Чтобы создать виртуальное окружение и инициализировать Pipfile, выполните:

pipenv install django

Эта команда создаст Pipfile, где будут указаны все зависимости. Теперь вместо requirements.txt вам не нужно вручную следить за версиями библиотек.

Пример Pipfile:

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

[packages]
django = "==4.2.3"

[dev-packages]
pytest = "*"

Pipfile.lock фиксирует точные версии всех зависимостей и делает проект предсказуемым.

3.2. Poetry

Poetry — это современный инструмент для управления зависимостями. Его основное преимущество — понятный и удобный workflow.

Чтобы установить Poetry, выполните:

pip install poetry

Инициализация проекта:

poetry init

Вас спросят о названии проекта, авторах и начальных зависимостях. После этого будет создан pyproject.toml — удобный файл управления зависимостями и настройками проекта.

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

poetry add django

Эта команда автоматически добавит Django в список зависимостей.

4. Управление обновлением пакетов

Иногда может возникнуть ситуация, когда вам нужно проверить, какие пакеты устарели. Для этого используйте:

pip list --outdated

Эта команда покажет пакеты, для которых доступны новые версии.

Чтобы обновить конкретный пакет, выполните:

pip install --upgrade <имя_пакета>

Если вы используете Poetry, обновить можно так:

poetry update

5. Практические советы по работе с зависимостями

При работе над проектом вам понадобятся разные наборы библиотек для разработки и для боевого сервера. В разработке мы используем инструменты для тестирования (например, pytest) и проверки кода (flake8). А вот на боевом сервере они не нужны — там должны быть только те библиотеки, которые реально используются в коде.

Современные инструменты вроде Pipenv и Poetry помогают удобно разделить эти зависимости. Например, в Pipenv это выглядит так:

# Pipfile
[packages]
django = "*"          # нужен везде
psycopg2 = "*"       # тоже нужен везде

[dev-packages]
pytest = "*"         # только для разработки
flake8 = "*"         # только для разработки
Для разделения в Pipenv и Poetry есть соответствующие секции. Например, в `Pipfile`:

```toml
[dev-packages]
pytest = "*"

Хранение requirements.txt в Git

Всегда фиксируйте requirements.txt или аналогичный файл в системе контроля версий. Это гарантирует, что все члены команды используют одни и те же библиотеки.

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

Если проект развернут в Docker, фиксируйте зависимости, используя COPY и pip install в Dockerfile. Пример:

COPY requirements.txt /app/requirements.txt
RUN pip install -r /app/requirements.txt

Типичные ошибки

  • Забыли активировать виртуальное окружение. Всегда проверяйте, что вы работаете внутри venv — это видно по подсказке в командной строке (venv).

  • Обновление пакетов без фиксации. Если вы обновили пакеты, но не зафиксировали их в requirements.txt, следующий разработчик может столкнуться с проблемами при установке зависимостей.

  • Смешивание систем управления зависимостями. Работайте либо с pip, либо с pipenv, либо с poetry, но не со всеми сразу.

Теперь вы вооружены всеми инструментами для управления зависимостями, чтобы ваш проект оставался стабильным, предсказуемым и лёгким в управлении! Продолжаем путь в мире Django! 🎉

1
Задача
Модуль 3: Django, 2 уровень, 8 лекция
Недоступна
Создание файла requirements.txt
Создание файла requirements.txt
1
Задача
Модуль 3: Django, 2 уровень, 8 лекция
Недоступна
Установка зависимостей из файла requirements.txt
Установка зависимостей из файла requirements.txt
Комментарии
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ