Управление необходимыми пакетами Python с помощью requirements.txt
Область применения:
Visual Studio Visual Studio для Mac
Visual Studio Code ![]()
Если вы предоставляете доступ к проекту другим, используете систему сборки или планируете скопировать проект в другое расположение, где нужно восстановить среду, то необходимо указать внешние пакеты, необходимые проекту. Рекомендуется использовать файл requirements.txt (readthedocs.org), содержащий список команд для pip, который устанавливает необходимые версии зависимых пакетов. Наиболее распространенной является команда pip freeze > requirements.txt , которая записывает текущий список пакетов среды в файл requirements.txt.
Технически для отслеживания требований можно использовать любой файл (используя -r при установке пакета), но Visual Studio имеет встроенную поддержку requirements.txt:

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



- Replace entire file (Заменить весь файл) удаляет все существующие элементы, комментарии и параметры.
- Обновить существующие записи определяет требования к пакету и обновляет описатели версии в соответствии с установленной версией.
- Update and add entries (Обновить и добавить записи) обновляет имеющиеся требования и добавляет все другие пакеты в конец файла.
Файлы requirements.txt содержат точные версии всех установленных пакетов, и вы можете использовать эти файлы, чтобы зафиксировать требования окружения. Такие версии позволяют легко воспроизвести ваше окружение на другом компьютере. Файлы с требованиями включают пакеты, даже если они были установлены с диапазоном версий, как зависимость от другого пакета или с установщиком, отличным от pip.
Если pip не удается установить пакет, указанный в файле requirements.txt, установка завершается сбоем. В этом случае нужно вручную исключить этот пакет из файла или использовать параметры pip для указания ссылки на устанавливаемую версию пакета. Например, можно использовать pip wheel для компиляции зависимости и добавления параметра —find-links в файл requirements.txt:
C:\Project>pip wheel azure Downloading/unpacking azure Running setup.py (path:C:\Project\env\build\azure\setup.py) egg_info for package azure Building wheels for collected packages: azure Running setup.py bdist_wheel for azure Destination directory: c:\project\wheelhouse Successfully built azure Cleaning up. C:\Project>type requirements.txt --find-links wheelhouse --no-index azure==0.8.0 C:\Project>pip install -r requirements.txt -v Downloading/unpacking azure==0.8.0 (from -r requirements.txt (line 3)) Local files found: C:/Project/wheelhouse/azure-0.8.0-py3-none-any.whl Installing collected packages: azure Successfully installed azure Cleaning up. Removing temporary dir C:\Project\env\build.
Связанный контент
- Управление окружениями Python в Visual Studio
- Выбор интерпретатора для проекта
- Пути поиска
- Справочная информация по окну «Окружения Python»
как вы обновляете requirements.txt?
Возникла задача обновить requirements.txt . А проблема в том что он содержит как прямые зависимости проекта, так и зависимости зависимостей. Мне бы хотелось обновить прямые зависимости до конкретных версий, а все остальные поставить самые последние (чтобы, скажем, получить все security fixes и прочее). Как бы это сделать?
Ну или поделитесь своим опытом обновления requirements.txt . Я пока не придумал ничего лучше как начать с пустого virtualenv и добавлять пакеты пока проект не станет запускаться. Но мне этот подход не нравится, например, тем что
1) это ручная работа
2) иногда import попадается в середине кода. А покрытие тестами пока хромает чтобы надёжно выявить такие дурацкие проблемы (но мы над этим работаем).
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 в корне проекта. Формат этого файла простой: по одному пакету на строку.
Заморозка пакетов
У одного пакета обычно много версий. Когда мы просим пип установить пакет, он устанавливает самую свежую из доступных.
Это может привести к проблемам: скажем, проект разрабатывался на версии 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
Получите крутое код-ревью от практикующих программистов с разбором ошибок и рекомендациями, на что обратить внимание — бесплатно.
Переходите на страницу учебных модулей «Девмана» и выбирайте тему.