Все требования в одном месте – requirements.txt
Обычно для запуска проекта требуется несколько внешних пакетов.
Чтобы каждый раз с болью в сердце не собирать их, список этих пакетов
принято поставлять вместе с исходным кодом. Принято селить весь список необходимых
пакетов в файле requirements.txt
в корне проекта. Формат этого файла простой:
по одному пакету на строку.
Заморозка пакетов
У одного пакета обычно много версий. Когда мы просим пип установить пакет, он устанавливает самую свежую из доступных.
Это может привести к проблемам: скажем, проект разрабатывался на версии 1.2. Через полгода потребовалось развернуть его заново, пип установил последнюю версию – 1.5. Эта версия может быть не совместима со старой, тогда код сломается.
Например, такая история была с модулем vk
: в версии 1.5 нужно было использовать класс
vk.api.APISession
, а в версии 2.0 – vk.OAuthAPI
. Понятное дело, программа,
которая использует не ту версию модуля, ломалась – старого класса-то нет.
Чтобы такого не происходило, пакеты принято замораживать – указывать версию пакета
вместе с названием. Пип поддерживает такой синтаксис: модуль==версия
.
Вот часть requirements.txt
из Девмана:
django==1.10.2
pillow==3.3.0
gunicorn==19.6.0
sorl-thumbnail==12.3
ptpython==0.35
Получить все версии пакетов, установленных на вашем компьютере, можно командой pip freeze
:
$ pip freeze
django==1.10.2
pillow==3.3.0
gunicorn==19.6.0
sorl-thumbnail==12.3
ptpython==0.35
...
Все зависимости заморозить и в requirements.txt
Установка
Все пакеты из requirements.txt
можно установить одним махом, пип такое умеет:
pip install -r requirements.txt
.
Зависимости зависимостей
К сожалению, правильное заполнение requirements.txt
не решает все проблемы с зависимостями
и версиями.
Дело в том, что у перечисленных в файле зависимостей есть свои зависимости. Например, модуль
vk
для своей установки требует модуль requests
. Пип установит его сам, незаметно для нас.
Проблема в том, что если модуль requests
не заморожен в исходниках модуля vk
, через полгода
всё опять может сломаться: версия vk
будет правильная, а requests
– нет.
Эта проблема свойственна большим проектам, у которых десятки зависимостей и сотни неявных зависимостей.
Решение этой проблемы рассмотрим в другой раз. Главное – быть начеку.
Попробуйте бесплатные уроки по Python
Получите крутое код-ревью от практикующих программистов с разбором ошибок и рекомендациями, на что обратить внимание — бесплатно.
Переходите на страницу учебных модулей «Девмана» и выбирайте тему.