Все требования в одном месте – 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
Получите крутое код-ревью от практикующих программистов с разбором ошибок и рекомендациями, на что обратить внимание — бесплатно.
Переходите на страницу учебных модулей «Девмана» и выбирайте тему.
Файл requirements.txt в Python и как его создать
requirements.txt — это простой текстовый файл, который содержит перечень всех модулей и пакетов, необходимых для корректной работы вашей программы. Создавая файл Python requirements.txt , вы избавляете себя от необходимости искать и устанавливать все необходимые модули вручную.
Из статьи вы узнаете о том, как создать файл requirements.txt , о его преимуществах и особенностях использования.
Преимущества использования файла зависимостей
- Возможность отслеживать актуальный список всех модулей и пакетов Python, используемых в вашем проекте.
- Облегчение процесса установки недостающих компонентов.
- Удобство совместной работы. Если на ПК другого пользователя отсутствуют нужные модули, они будут быстро загружены из файла requirements.txt , обеспечив беспроблемный запуск программы.
- Если вы захотите удалить, добавить или обновить модуль, изменения будет достаточно внести только в файл requirements.txt .
- При загрузке requirements.txt , GitHub проверяет зависимости на наличие конфликтов, и в некоторых случаях устраняет уязвимости.
Как создать файл зависимостей
Для этого вам достаточно перейти в корневой каталог проекта, где хранятся ваши .py -файлы, и создать текстовый документ requirements.txt . Важно убедиться, чтобы название было именно таким.
Также этот файл может быть сгенерирован автоматически с помощью следующей команды:
pip freeze > requirements.txt
Она возвращает список всех установленных модулей с указанием версий и помещает их в текстовый файл. Обратите внимание, что pip freeze подразумевает использование виртуальной среды для текущего проекта. В противном случае, список зависимостей может включать в себя и те пакеты, которые установлены в другие виртуальные среды.
Дополнительный вариант использования этой команды, который возвращает только локальные установленные пакеты:
pip freeze —local
Добавление модулей в файл
После создания файла его необходимо заполнить названиями модулей и их версиями. Самый простой способ — сделать это вручную. Вот пример содержимого requirements.txt :
matplotlib==3.2.1 numpy==1.18.5 pandas==1.0.4 tensorflow==2.3.1
Перечислив все зависимости, сохраняем файл и закрываем его.
Второй способ — команда pip freeze > requirements.txt , которая работает, даже если файл уже существует. Его пустое содержимое будет заполнено списком пакетов так же, как и при генерации нового файла.
Установка модулей из файла
Для того чтобы установить пакеты из requirements.txt , необходимо открыть командную строку, перейти в каталог проекта и ввести следующую команду:
pip install -r requirements.txt
Если вы хотите обновить компоненты вместо их повторной установки, используйте команду pip install -U -r requirements.txt .
Как поддерживать requirements.txt в актуальном состоянии
Если вы уже создали файл с зависимостями ранее, но по какой-то причине не обновляли его содержимое, волноваться не стоит. Выполните следующие шаги:
- Выведите список устаревших модулей с помощью pip list —outdated .
- Обновите выведенные пакеты вручную с помощью pip install -U PackageName или автоматически, используя pip install -U -r requirements.txt .
- Убедитесь, что ваша программа работает корректно.
- Используйте pip freeze > requirements.txt , чтобы актуализировать содержимое файла с необходимыми внешними зависимостями.
Таким образом вы сможете без проблем обновить информацию об используемых установленных пакетах, даже если в течение определенного времени не занимались управлением зависимостями.
Помните, что постоянное обновление файла requirements.txt помогает избежать многих проблем, связанных с устаревшими или отсутствующими модулями или пакетами. Как следствие, вы обеспечите корректную работу всех ваших сборок на любых ПК.
Как еще можно создать файл зависимостей?
Можно воспользоваться библиотекой pipreqs , которая сделает все за нас. Её запуск в командной строке сгенерирует файл с зависимостями:
$ pipreqs /home/project/location Successfully saved requirements file in /home/project/location/requirements.txt
При этом никто не запрещает вновь обратиться к pip freeze или заполнению документа вручную.
Советы по использованию файла требований
- Всегда используйте pip freeze , чтобы поддерживать список внешних зависимостей в актуальном состоянии.
- Храните в requirements.txt только необходимые модули и пакеты. В противном случае файл может получиться слишком большим и нечитаемым, а неиспользуемые компоненты будут лишь впустую тратить ресурсы.
- Сохраняйте файл с зависимостями в репозитории проекта, чтобы им могли пользоваться другие люди.
- Используйте pip install -r requirements.txt , чтобы автоматически установить все модули, необходимые для работы программы.
- Поддерживайте список зависимостей в актуальном состоянии, чтобы обеспечить полную работоспособность проекта на различных машинах.
Заключение
Мы рассказали вам о том, что представляет собой файл requirements.txt в Python и как его создать. Более того, в материале были разобраны преимущества его использования и практические рекомендации.
Ведение файла requirements.txt является неотъемлемой частью управления зависимостями проекта, которая в конечном итоге избавляет от ряда возможных проблем как программистов, так и конечных пользователей.
Как создать requirements.txt файл для python программы
Требование наличия в корне файла requirements.txt — достаточно распространенное среди заказчиков. Это и не удивительно — ведь для того чтобы быстро установить все требуемые библиотеки python в новом окружении достаточно выполнить команду pip install -r requirements.txt .
Рассмотрим несколько вариантов.
Вариант первый — вручную. Минусы думаю объяснять не надо, мало того что вы можете ошибиться в названиях и версиях, но также легко и пропустить библиотеку.
Вариант второй — стандартом pip. Выполнив команду pip freeze > requirements.txt вы сразу получите файл в требуемом формате. Если есть уверенность, что у Вас не установлено никаких лишних библиотек — то это самый оптимальный способ. Недостаток этого способа один — в файле будут отображены абсолютно все библиотеки python, уже установленные ранее и никак не относящиеся к текущему проекту.
Вариант третий — использовать дополнительную библиотеку для генерации файла зависимостей. В данном случае надо сразу смотреть на кроссплатформенность, так как не все библиотеки могут работать с windows/unix . Самым распространненым вариантом на данный момент является библиотека pipreqs (установка «pip install pipreqs») . Чтобы сгенерировать файл requirements.txt надо в команде указать просто путь до папки с проектом, т.е. : pipreqs /path/to/project/folder . Если requirements.txt уже есть и необходимо его перезаписать, то используйте флаг —force . Если просто хотите посмотреть на используемые библиотеки без создания, флаг —print.
В конце приведу пример созданного файла:
PyMySQL==0.7.11 pandas==0.19.2 opencv_contrib_python==3.2.0.7 beautifulsoup4==4.6.0 scikit_learn==0.19.0 python_stdnum==1.6
Requirements txt python как сделать
Файл со списком пакетов, необходимых для работы Python-приложения, называют файлом требований, requirements -файлом или просто реками. Обычно такой файл хранится в корневой директории исходного кода приложения и называется requirements.txt .
Такой файл можно создать самостоятельно с нуля или, уже в готовом приложении, с помощью команды:
pip freeze > requirements.txt
Для установки пакетов из requirements-файла нужно воспользоваться ключом r команды pip :
pip install -r requirements.txt
Кроме названий пакетов и номеров их версий в таких файлах могут (и должны) содержаться следующие полезные штуки.
Комплексные номера версий пакетов
pylint # последняя актуальная версия pylint == 2.1.3 # конкретная версия pylint >= 2.1.1 # минимально возможная версия pylint != 2.1.1 # любая версия кроме указанной pylint ~= 2.1 # совместимый релиз; в примере последняя версия 2.1.*
Комментарии
# Линтер для Python. pylint == 2
Ссылки на другие requirements-файлы
Делать инклуды, то есть включения одних requirements-файлов в другие, удобно для разделения пакетов на набор для разработки и продакшена.
Допустим у нас есть requirements.txt :
flask numpy pandas tensorflow
Для разработки нам нужны пакеты с линтером (pylint) и тестами (pytest). В таком случае можно создать файл requirements-dev.txt , в который осуществить инклуд основного файла с требованиями:
# Подключение основного файла со списком пакетов. -r requirements.txt pylint pytest
Подробнее о работе с requirements-файлами и pip в целом.
