Команда разработчиков, работающая над проектом, использует множество библиотек. Некоторые из них регулярно обновляются, другие уже устарели, а третьи вдруг решают, что больше не хотят дружить с Python 3.10, который вы только что настроили. Управление зависимостями помогает сохранить проект в рабочем состоянии, несмотря на всё происходящее в мире.
1. Основы управления зависимостями
В мире Python зависимости — это внешние библиотеки и модули, которые используются в проекте. Например, для Django-проекта минимальная зависимость — это сам Django. У вас могут быть и другие зависимости, такие как:
requests— для работы с HTTP-запросами.pillow— для обработки изображений.django-rest-framework— для создания API.
Если представить проект как крутое блюдо, то зависимости — это ингредиенты. Неправильное количество соли (неподходящая версия библиотеки) или отсутствие чеснока (забытая установка пакета) может всё разрушить.
Зачем управлять зависимостями?
Предсказуемость: вы уверены, что проект будет работать одинаково на всех устройствах команды, на тестовых и продакшен-серверах.
Cтабильность: если одна из зависимостей обновится до несовместимой версии, это не сломает ваш проект (по крайней мере, в теории).
Легкость развертывания: новый разработчик или сервер сможет быстро настроить среду, идеально подходящую для проекта.
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! 🎉
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ