- Файл requirements.txt в Python и как его создать
- Преимущества использования файла зависимостей
- Как создать файл зависимостей
- Добавление модулей в файл
- Установка модулей из файла
- Как поддерживать requirements.txt в актуальном состоянии
- Как еще можно создать файл зависимостей?
- Советы по использованию файла требований
- Заключение
- Requirements File Format#
- Example#
- Structure#
- Encoding#
- Line continuations#
- Comments#
- Supported options#
- Global options#
- Per-requirement options#
- Referring to other requirements files#
- Using environment variables#
- Influencing the build system#
Файл 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 подразумевает использование виртуальной среды для текущего проекта. В противном случае, список зависимостей может включать в себя и те пакеты, которые установлены в другие виртуальные среды.
Дополнительный вариант использования этой команды, который возвращает только локальные установленные пакеты:
Добавление модулей в файл
После создания файла его необходимо заполнить названиями модулей и их версиями. Самый простой способ — сделать это вручную. Вот пример содержимого 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 File Format#
Requirements files serve as a list of items to be installed by pip, when using pip install . Files that use this format are often called “pip requirements.txt files”, since requirements.txt is usually what these files are named (although, that is not a requirement).
Note The requirements file format is closely tied to a number of internal details of pip (e.g., pip’s command line options). The basic format is relatively stable and portable but the full syntax, as described here, is only intended for consumption by pip, and other tools should take that into account before using it for their own purposes.
Example#
# This is a comment, to show how #-prefixed lines are ignored. # It is possible to specify requirements as plain names. pytest pytest-cov beautifulsoup4 # The syntax supported here is the same as that of requirement specifiers. docopt == 0.6.1 requests [security] >= 2.8.1, == 2.8.* ; python_version "2.7" urllib3 @ https://github.com/urllib3/urllib3/archive/refs/tags/1.26.8.zip # It is possible to refer to other requirement files or constraints files. -r other-requirements.txt -c constraints.txt # It is possible to refer to specific local distribution paths. ./downloads/numpy-1.9.2-cp34-none-win32.whl # It is possible to refer to URLs. http://wxpython.org/Phoenix/snapshot-builds/wxPython_Phoenix-3.0.3.dev1820+49a8884-cp34-none-win_amd64.whl
Structure#
For details on requirement specifiers, see Requirement Specifiers . For examples of all these forms, see Examples .
Encoding#
Requirements files are utf-8 encoding by default and also support PEP 263 style comments to change the encoding (i.e. # -*- coding: -*- ).
Line continuations#
A line ending in an unescaped \ is treated as a line continuation and the newline following it is effectively ignored.
Comments#
A line that begins with # is treated as a comment and ignored. Whitespace followed by a # causes the # and the remainder of the line to be treated as a comment.
Comments are stripped after line continuations are processed.
Supported options#
Requirements files only supports certain pip install options, which are listed below.
Global options#
The following options have an effect on the entire pip install run, and must be specified on their individual lines.
- -i, —index-url
- —extra-index-url
- —no-index
- -c, —constraint
- -r, —requirement
- -e, —editable
- -f, —find-links
- —no-binary
- —only-binary
- —prefer-binary
- —require-hashes
- —pre
- —trusted-host
- —use-feature
To specify —pre , —no-index and two —find-links locations:
--pre --no-index --find-links /my/local/archives --find-links http://some.archives.com/archives
Per-requirement options#
The options which can be applied to individual requirements are:
Referring to other requirements files#
If you wish, you can refer to other requirements files, like this:
You can also refer to constraints files , like this:
Using environment variables#
pip supports the use of environment variables inside the requirements file.
You have to use the POSIX format for variable names including brackets around the uppercase name as shown in this example: $ . pip will attempt to find the corresponding environment variable defined on the host system at runtime.
There is no support for other variable expansion syntaxes such as $VARIABLE and %VARIABLE% .
You can now store sensitive data (tokens, keys, etc.) in environment variables and only specify the variable name for your requirements, letting pip lookup the value at runtime. This approach aligns with the commonly used 12-factor configuration pattern.
Influencing the build system#
This disables the use of wheels (cached or otherwise). This could mean that builds will be slower, less deterministic, less reliable and may not behave correctly upon installation.
This mechanism is only preserved for backwards compatibility and should be considered deprecated. A future release of pip may drop these options.
The —global-option option is used to pass options to setup.py .
These options are highly coupled with how pip invokes setuptools using the setup.py (legacy) build system interface. It is not compatible with newer pyproject.toml build system interface.
This is will not work with other build-backends or newer setup.cfg-only projects.
If you have a declaration like:
FooProject >= 1.2 --global-option="--no-user-cfg"
The above translates roughly into running FooProject’s setup.py script as:
python setup.py --no-user-cfg install
Note that the only way of giving more than one option to setup.py is through multiple —global-option options.