Автоматизація розгортань Django: Налаштування та конфігурація Poetry

текст перекладу

pic

Це працює на моїй машині!

Фраза, яку кожен розробник ненавидить говорити. Ваш додаток Django працював бездоганно в розробці, але як тільки він потрапив у продакшн, все пішло не так. Одна неправильна версія пакету може перетворити вашу п’ятничну розгортку на марафон налагодження на вихідних.

Якщо ви коли-небудь розгортали проект Django, то знаєте, що керування залежностями може бути однією з найскладніших частин. Одна неправильна версія, і ви зіткнетеся з дивними помилками, простоями або годинами розчарування в спробах зрозуміти, що пішло не так. Ось чому інструменти на зразок Poetry стають справжньою знахідкою. Вони позбавляють вас зайвих клопотів з керуванням залежностями, роблячи ваші розгортання більш гладкими та передбачуваними.

У цій статті я покажу вам, як налаштувати та конфігурувати Poetry для вашого проекту Django. Розгляньте це як перший крок до того, щоб зробити процес розгортання не просто простішим, а й стабільним.

Чому Poetry?

Хоча традиційні інструменти, як pip і virtualenv, добре виконують свою роботу, вони мають свої обмеження. Керування файлом requirements.txt вручну або вирішення конфліктів версій можуть стати головним болем, коли ваш проект зростає. Poetry спрощує цей процес, виконуючи наступне:

  1. Автоматичне вирішення залежностей: Вирішує конфлікти та забезпечує сумісність.
  2. Фіксація версій: Створює файл poetry.lock, який фіксує точні версії для відтворюваності.
  3. Управління віртуальними середовищами: Автоматично створює та активує ізольовані середовища.

Налаштування Poetry для проекту Django

Давайте розпочнемо налаштування Poetry для вашого проекту Django.

1. Встановіть Poetry

Спочатку встановіть Poetry на вашу локальну машину. Використовуйте офіційний інсталятор для зручності:

curl -sSL https://install.python-poetry.org | python3 -

Перевірте встановлення:

poetry --version

2. Ініціалізуйте Poetry у вашому проекті Django

Перейдіть до вашої директорії проекту та ініціалізуйте Poetry:

cd /path/to/your-django-project  
poetry init

Poetry запитає вас про конфігурацію вашого проекту. Наприклад:

  • Назва пакету: your_project_name
  • Версія: 0.1.0
  • Опис: Django проект для автоматизації розгортань
  • Ліцензія: MIT (або за вашим вибором)
  • Залежності: Пропустіть зараз, додамо їх вручну.

Це створить файл pyproject.toml, який є основним конфігураційним файлом для Poetry.

3. Додайте залежності

Додайте Django та інші необхідні залежності до вашого проекту:

poetry add django gunicorn psycopg2-binary

Це:

  1. Встановить зазначені пакети.
  2. Оновить файл pyproject.toml з залежностями.
  3. Заблокує версії у файлі poetry.lock.

4. Додайте залежності для розробки

Для інструментів розробки, таких як лінтери та фреймворки для тестування, використовуйте:

poetry add --group dev black flake8 pytest

Це забезпечить, щоб ці залежності не потрапили в продакшн.

5. Управління віртуальним середовищем

За замовчуванням Poetry управляє віртуальними середовищами для вас. Активуйте середовище:

poetry shell

Запускайте команди Django в цьому середовищі:

python manage.py runserver

Налаштування Poetry для розгортання

Тепер, коли Poetry налаштовано, давайте налаштуємо його для розгортання.

1. Виключіть залежності для розробки

Забезпечте, щоб під час розгортання встановлювались лише залежності для продакшн:

poetry install --no-dev

2. Заблокуйте версії для узгодженості

Завжди використовуйте файл poetry.lock у ваших розгортаннях, щоб забезпечити встановлення однакових версій у різних середовищах:

poetry lock

Закомітьте файл poetry.lock у систему контролю версій.

3. Автоматизуйте встановлення залежностей

Включіть установку залежностей у вашому сценарії розгортання:

#!/bin/bash  

echo "Installing dependencies..."  
poetry install --no-dev

Інтеграція Poetry з Django

Poetry спрощує інтеграцію з Django, підтримуючи чисте віртуальне середовище.
текст перекладу

Оновіть файли manage.py та wsgi.py, щоб забезпечити їх безперешкодну роботу в середовищі Poetry.

Приклад: Оновлення Python шляху в manage.py

Якщо віртуальне середовище Poetry не виявляється автоматично, явно додайте його:

import os  
import sys
if os.getenv("POETRY_ACTIVE"):  
    sys.path.append(os.path.join(os.path.dirname(__file__), "venv/lib/python3.x/site-packages"))  

os.environ.setdefault("DJANGO_SETTINGS_MODULE", "your_project.settings")  
from django.core.management import execute_from_command_line  
execute_from_command_line(sys.argv)

Вирішення конфліктів залежностей

Конфлікти залежностей можуть виникнути, коли різні пакети вимагають несумісні версії. Вирішуйте їх за допомогою потужного резольвера Poetry:

  1. Перевірте наявність конфліктів:
poetry check
  1. Оновіть залежності для вирішення проблем:
poetry update
  1. Явно вкажіть версії, якщо це необхідно:
poetry add [email protected]

Використання Poetry в CI/CD Pipelines

При розгортанні вашого проекту Django з такими інструментами, як GitHub Actions, інтегруйте Poetry для керування залежностями:

Приклад фрагмента GitHub Actions

- name: Install Poetry  
  run: curl -sSL https://install.python-poetry.org | python3 -  

- name: Install Dependencies  
  run: poetry install --no-dev

Загальні команди Poetry на одному погляді

  • Додати залежність: poetry add
  • Додати dev-залежність: poetry add --group dev
  • Встановити залежності: poetry install
  • Оновити залежності: poetry update
  • Активувати віртуальне середовище: poetry shell

Переваги Poetry при розгортанні

З Poetry:

  • Ваші розгортання передбачувані завдяки файлу poetry.lock.
  • Залежності управляються чисто в ізольованих середовищах.
  • Ви витрачаєте менше часу на налагодження проблем з залежностями і більше часу на відправку нових функцій.

У наступній статті ми напишемо повний сценарій розгортання, який поєднає Poetry, міграції бази даних і перезавантаження серверів. Залишайтеся з нами, і ми наближаємося до повністю автоматизованих розгортань Django!

Перекладено з: Automating Django Deployments: Poetry Setup and Configuration

Leave a Reply

Your email address will not be published. Required fields are marked *