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! 🎉

Коментарі
ЩОБ ПОДИВИТИСЯ ВСІ КОМЕНТАРІ АБО ЗАЛИШИТИ КОМЕНТАР,
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ