Как обновить requirements txt python
Перейти к содержимому

Как обновить requirements txt python

  • автор:

Файл requirements.txt в Python и как его создать

requirements.txt — это простой текстовый файл, который содержит перечень всех модулей и пакетов, необходимых для корректной работы вашей программы. Создавая файл Python requirements.txt , вы избавляете себя от необходимости искать и устанавливать все необходимые модули вручную.

Из статьи вы узнаете о том, как создать файл requirements.txt , о его преимуществах и особенностях использования.

Преимущества использования файла зависимостей

  1. Возможность отслеживать актуальный список всех модулей и пакетов Python, используемых в вашем проекте.
  2. Облегчение процесса установки недостающих компонентов.
  3. Удобство совместной работы. Если на ПК другого пользователя отсутствуют нужные модули, они будут быстро загружены из файла requirements.txt , обеспечив беспроблемный запуск программы.
  4. Если вы захотите удалить, добавить или обновить модуль, изменения будет достаточно внести только в файл requirements.txt .
  5. При загрузке 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 в актуальном состоянии

Если вы уже создали файл с зависимостями ранее, но по какой-то причине не обновляли его содержимое, волноваться не стоит. Выполните следующие шаги:

  1. Выведите список устаревших модулей с помощью pip list —outdated .
  2. Обновите выведенные пакеты вручную с помощью pip install -U PackageName или автоматически, используя pip install -U -r requirements.txt .
  3. Убедитесь, что ваша программа работает корректно.
  4. Используйте pip freeze > requirements.txt , чтобы актуализировать содержимое файла с необходимыми внешними зависимостями.

Таким образом вы сможете без проблем обновить информацию об используемых установленных пакетах, даже если в течение определенного времени не занимались управлением зависимостями.

Помните, что постоянное обновление файла requirements.txt помогает избежать многих проблем, связанных с устаревшими или отсутствующими модулями или пакетами. Как следствие, вы обеспечите корректную работу всех ваших сборок на любых ПК.

Как еще можно создать файл зависимостей?

Можно воспользоваться библиотекой pipreqs , которая сделает все за нас. Её запуск в командной строке сгенерирует файл с зависимостями:

$ pipreqs /home/project/location Successfully saved requirements file in /home/project/location/requirements.txt

При этом никто не запрещает вновь обратиться к pip freeze или заполнению документа вручную.

Советы по использованию файла требований

  1. Всегда используйте pip freeze , чтобы поддерживать список внешних зависимостей в актуальном состоянии.
  2. Храните в requirements.txt только необходимые модули и пакеты. В противном случае файл может получиться слишком большим и нечитаемым, а неиспользуемые компоненты будут лишь впустую тратить ресурсы.
  3. Сохраняйте файл с зависимостями в репозитории проекта, чтобы им могли пользоваться другие люди.
  4. Используйте pip install -r requirements.txt , чтобы автоматически установить все модули, необходимые для работы программы.
  5. Поддерживайте список зависимостей в актуальном состоянии, чтобы обеспечить полную работоспособность проекта на различных машинах.

Заключение

Мы рассказали вам о том, что представляет собой файл requirements.txt в Python и как его создать. Более того, в материале были разобраны преимущества его использования и практические рекомендации.

Ведение файла requirements.txt является неотъемлемой частью управления зависимостями проекта, которая в конечном итоге избавляет от ряда возможных проблем как программистов, так и конечных пользователей.

Все требования в одном месте – 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

Получите крутое код-ревью от практикующих программистов с разбором ошибок и рекомендациями, на что обратить внимание — бесплатно.

Переходите на страницу учебных модулей «Девмана» и выбирайте тему.

How to Update Requirements Files¶

The different requirements files introduced in Software Process section are the following:

  • requirements.txt
  • requirements-dev.txt
  • requirements-doc.txt
  • requirements-min.txt

requirements.txt¶

requirements.txt of the project can be created or updated and then captured using the following script:

mkvirtualenv pynwb-requirements cd pynwb pip install . pip check # check for package conflicts pip freeze > requirements.txt deactivate rmvirtualenv pynwb-requirements 

requirements-(dev|doc).txt¶

Any of these requirements files can be updated using the following scripts:

cd pynwb # Set the requirements file to update: requirements-dev.txt or requirements-doc.txt target_requirements=requirements-dev.txt mkvirtualenv pynwb-requirements # Install updated requirements pip install -U -r $target_requirements # If relevant, you could pip install new requirements now # pip install -U # Check for any conflicts in installed packages pip check # Update list of pinned requirements pip freeze > $target_requirements deactivate rmvirtualenv pynwb-requirements

requirements-min.txt¶

Minimum requirements should be updated manually if a new feature or bug fix is added in a dependency that is required for proper running of PyNWB. Minimum requirements should also be updated if a user requests that PyNWB be installable with an older version of a dependency, all tests pass using the older version, and there is no valid reason for the minimum version to be as high as it is.

© Copyright 2017-2023, Neurodata Without Borders. Revision 68c4f564 .

как вы обновляете requirements.txt?

Возникла задача обновить requirements.txt . А проблема в том что он содержит как прямые зависимости проекта, так и зависимости зависимостей. Мне бы хотелось обновить прямые зависимости до конкретных версий, а все остальные поставить самые последние (чтобы, скажем, получить все security fixes и прочее). Как бы это сделать?

Ну или поделитесь своим опытом обновления requirements.txt . Я пока не придумал ничего лучше как начать с пустого virtualenv и добавлять пакеты пока проект не станет запускаться. Но мне этот подход не нравится, например, тем что

1) это ручная работа

2) иногда import попадается в середине кода. А покрытие тестами пока хромает чтобы надёжно выявить такие дурацкие проблемы (но мы над этим работаем).

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *