Вы когда-нибудь тратили много часов на отладку программы на Python, чтобы в итоге обнаружить, что вы не установили все необходимые модули?
В этом уроке мы узнаем, как решить эту проблему, используя файл Python requirements.txt.
Что входит в файл requirements.txt?
Python — это язык, который сильно зависит от модулей. Например, если вы установите неправильную версию одного из модулей, необходимых вашей программе Python, вы можете столкнуться с проблемами при запуске вашей программы.
Вот здесь-то и проявляется вся роль файла Python requirements.txt.
Файл requirements.txt в Python хранит все модули и пакеты, установленные в проекте Python, с их версиями. Он позволяет людям, читающим код проекта Python, узнать, какие модули необходимы для выполнения проекта. А также упрощает установку модулей, необходимых для проекта.
Мы увидим, что можно быстро установить и обновить все модули и пакеты, указанные в файле требований, с помощью одной команды.
Умение создавать и читать файл требований на Python является обязательным для каждого программиста, и в этом уроке мы взломаем файл requirements.txt!
Прежде чем приступить к работе с этим руководством, создайте на своем компьютере каталог и внутри него простую программу Python под названием requirements_test.py, содержащую следующий код:
import numpy as np
import pandas as pd
from sklearn.preprocessing import StandardScaler
# create a 3x3 array with numpy
X_train = np.array([[ 1., -1., 2.],
[ 2., 0., 0.],
[ 0., 1., -1.]])
# fit this array to StandardScaler
scaler = StandardScaler().fit(X_train)
# transform X_train with this scaler
X_scaled = scaler.transform(X_train)
# Finally, convert this scaled array into a pandas dataframe
df = pd.DataFrame(X_scaled)
# Print the dataframe
print(df)
Как создать файл Python requirements.txt?
В Python файл requirements.txt обычно используется в виртуальной среде. Перед созданием файла requirements.txt мы узнаем, как создать виртуальную среду.
Сначала откройте терминал и установите модуль virtualenv с помощью Pip.
pip install virtualenv
Затем давайте создадим виртуальную среду с именем. sample_env в том же каталоге нашей программы Python, используя следующую команду:
python -m venv.sample_env
На этом этапе вы видите, что .sample_env был создан в текущем рабочем каталоге.
Активация виртуальной среды может различаться в зависимости от операционной системы. В Windows можно использовать следующее:
.sample_env\Scripts\activate
тогда как в Linux или macOS вам необходимо выполнить команду:
..sample_env/bin/activate
Вы можете убедиться, что виртуальная среда .sample_env активирована, поскольку после префикса командной строки вы увидите .(sample_env), как показано ниже:
$..sample_env/bin/activate
(.sample_env) #
Перед выполнением программы, которую мы создали в первой части, не забудьте установить модули с помощью команды:
pip install module_name
В этом случае, теперь, когда наша виртуальная среда активна, нам нужно выполнить следующие команды одну за другой:
pip install numpy
pip install pandas
pip install sklearn
Теперь вы можете выполнить программу Python, которую мы создали в начале этого урока:
(.sample_env) # python requirements_test.py
0 1 2
0 0.000000 -1.224745 1.336306
1 1.224745 0.000000 -0.267261
2 -1.224745 1.224745 -1.069045
Теперь мы готовы перейти к созданию файла требований. Команда pip3 freeze
покажет нам установленные модули с их версиями.
Мы можем перенаправить вывод команды pip3 freeze
в файл requirements.txt с помощью символа «>»:
pip3 freeze > requirements.txt
Убедитесь, что список модулей, требуемых нашим примером программы Python, находится внутри файла requirements.txt.
Вот список модулей, которые я вижу в файле requirements.txt:
joblib==1.2.0
numpy==1.23.4
pandas==1.5.1
python-dateutil==2.8.2
pytz==2022.5
scikit-learn==1.1.3
scipy==1.9.3
six==1.16.0
sklearn==0.0
threadpoolctl==3.1.0
Мы только что создали файл требований со всей информацией, необходимой для выполнения нашей программы.
Команда pip3 freeze
также перечисляет модули, от которых зависят основные модули. Модули Pandas, NumPy и scikit-learn зависят от других модулей, которые мы также видим в файле требований.
Позже мы увидим, как с помощью pipreqs можно вывести список только тех модулей, которые мы импортировали в проект!
Примечание: файл требований необходим для вашего проекта, поэтому не забудьте зафиксировать и отправить файл требований в репозиторий кода в системе контроля версий.
Как добавить модуль Python в файл requirements.txt
Первый способ добавления модулей Python в файл требований — это, конечно, редактирование файла requirements.txt. Затем вы можете вручную добавлять модули с их версиями в файл.
Однако этот метод не рекомендуется, поскольку он подвержен ошибкам и может быть сложным в управлении, если в проект Python импортировано много модулей.
Вместо этого мы представим pipreqs, который автоматически просканирует проект и выведет для вас список всех модулей и их версий!
Сначала установите pipreqs:
pip install pipreqs
Затем запустите pipreqs для текущего рабочего каталога, в котором находится наша программа Python.
pipreqs . --ignore .sample_env --force
Обратите внимание, что мы используем флаг --ignore
, поэтому убедитесь, что pipreqs игнорирует каталог виртуальной среды.
Кроме того, мы передаем флаг --force
, чтобы перезаписать его новым файлом требований.
Затем вы увидите новый файл requirements.txt, созданный в текущем каталоге, после того как увидите следующий вывод в командной строке:
INFO: Successfully saved requirements file in./requirements.txt
Вы можете продолжить и проверить, что файл requirements.txt, созданный в вашей папке, содержит имена и версии модулей.
На моем компьютере файл requirements.txt выглядит так:
numpy==1.23.4
pandas==1.5.1
scikit_learn==1.1.3
Обратите внимание, что названия версий могут отличаться, если вы реализуете это руководство в другой системе.
А если вы не используете флаг --force
и файл требований уже существует, вы увидите следующую ошибку:
WARNING: requirements.txt already exists, use --force to overwrite it
Здесь стоит отметить некоторые различия между pip freeze
и pipreqs
.
В то время как команда pip freeze
выводит список только тех пакетов, которые установлены с помощью команды pip
, pipreqs
не имеет такого ограничения.
Еще одно отличие заключается в том, что pip freeze
сохраняет все пакеты независимо от того, используются ли они в проекте, тогда как pipreqs
показывает только те пакеты, которые импортированы в проект.
Как установить модули Python с помощью Pip и requirements.txt
Освоив процесс создания файла требований, теперь мы разберемся, как установить модули Python, указанные в нашем файле требований.
Помните, что вы можете установить модуль с помощью команды pip install
:
pip install module_name
Но учитывая, что мы создали файл requirements.txt, мы можем просто передать его в pip и установить все модули одной командой:
pip install -r requirements.txt
Давайте сделаем следующее, чтобы протестировать установку модулей с использованием файла требований:
- деактивируйте виртуальную среду.
- удалите каталог виртуальной среды.
- воссоздать виртуальную среду.
- активируйте новую виртуальную среду.
(.sample_env) # deactivate
$ rm -fr.sample_env
$ python -m venv.sample_env
$..sample_env/bin/activate
После выполнения программы Python вы увидите следующую ошибку:
(.sample_env) # python requirements_test.py
Traceback (most recent call last):
File "requirements_test.py", line 1, in <module>
import numpy as np
ModuleNotFoundError: No module named 'numpy'
Ошибка ModuleNotFoundError возникает из-за того, что модуль NumPy еще не установлен.
Теперь выполните команду для установки всех модулей, от которых зависит наша программа Python, используя файл requirements.txt.
(.sample_env) # pip install -r requirements.txt
Collecting numpy==1.23.4
Using cached numpy-1.23.4-cp38-cp38-macosx_10_9_x86_64.whl (18.1 MB)
Collecting pandas==1.5.1
Using cached pandas-1.5.1-cp38-cp38-macosx_10_9_x86_64.whl (11.9 MB)
Collecting scikit_learn==1.1.3
Using cached scikit_learn-1.1.3-cp38-cp38-macosx_10_9_x86_64.whl (8.6 MB)
Collecting python-dateutil>=2.8.1
Using cached python_dateutil-2.8.2-py2.py3-none-any.whl (247 kB)
Collecting pytz>=2020.1
Using cached pytz-2022.5-py2.py3-none-any.whl (500 kB)
Collecting scipy>=1.3.2
Using cached scipy-1.9.3-cp38-cp38-macosx_10_9_x86_64.whl (34.2 MB)
Collecting joblib>=1.0.0
Using cached joblib-1.2.0-py3-none-any.whl (297 kB)
Collecting threadpoolctl>=2.0.0
Using cached threadpoolctl-3.1.0-py3-none-any.whl (14 kB)
Collecting six>=1.5
Using cached six-1.16.0-py2.py3-none-any.whl (11 kB)
Installing collected packages: numpy, six, python-dateutil, pytz, pandas, scipy, joblib, threadpoolctl, scikit-learn
Successfully installed joblib-1.2.0 numpy-1.23.4 pandas-1.5.1 python-dateutil-2.8.2 pytz-2022.5 scikit-learn-1.1.3 scipy-1.9.3 six-1.16.0 threadpoolctl-3.1.0
Модули успешно установлены.
Теперь давайте выполним нашу тестовую программу:
(.sample_env) # python requirements_test.py
0 1 2
0 0.000000 -1.224745 1.336306
1 1.224745 0.000000 -0.267261
2 -1.224745 1.224745 -1.069045
Оно работает!
Заключение
В этом уроке мы узнали, какую важную роль файл requirements.txt играет в Python. В Python важно знать, какие модули и версии используются в проекте, и файл requirements.txt отслеживает эту информацию.
Мы также узнали, как создать файл требований и как установить все модули и пакеты в файле требований с помощью одной команды.