
pip и зависимости Python: установка и requirements.txt
Устанавливаем пакет в виртуальное окружение, проверяем связку Python и pip, фиксируем версии в requirements.txt и воспроизводим окружение.
Содержание
Стандартная библиотека Python покрывает много задач, но проекту нередко нужен внешний пакет. Такой пакет устанавливает pip — программа управления дистрибутивами Python. Здесь слово «дистрибутив» означает архив с кодом и метаданными, который можно установить; имя импортируемого модуля иногда отличается от имени дистрибутива.
Все команды ниже выполняются в каталоге server-report с активированным виртуальным окружением. Они обращаются к интернету и меняют только .venv, а не системный Python.
Убедитесь, что pip относится к нужному Python
Сначала выведите версию pip и путь установки. Эта диагностическая команда ничего не скачивает и не меняет окружение:
python -m pip --version
В строке результата должен встречаться путь внутри server-report/.venv. Запись python -m pip важнее короткой команды pip: она явно запускает pip выбранным интерпретатором. Если путь ведёт в системный каталог, остановитесь и снова проверьте активацию либо используйте полный путь к Python из .venv.
Установите один внешний пакет
Для примера установим HTTP-библиотеку Requests из Python Package Index. Команда скачает сам пакет и объявленные им зависимости в текущее окружение:
python -m pip install requests
Успешный вывод заканчивается списком установленных дистрибутивов. Имя requests здесь относится к устанавливаемому пакету и одновременно совпадает с именем модуля для import, но такое совпадение не является общим правилом.
Проверьте происхождение пакета без сетевого запроса:
python -m pip show requests
python -c "import requests; print(requests.__file__)"
Первая команда показывает метаданные и зависимости, вторая — фактический файл импортированного модуля. Оба пути должны находиться внутри .venv. Если импорт не работает после успешной установки, чаще всего пакет попал к другому интерпретатору или собственный файл проекта назван requests.py.
Прямая и транзитивная зависимости
Requests является прямой зависимостью: мы выбрали её для своего кода. Пакеты, которые Requests требует для своей работы, называются транзитивными зависимостями. Их выбирает установщик согласно метаданным.
Удаление или обновление одной прямой зависимости может затронуть совместимость всего набора. Поэтому не обновляйте рабочее окружение командой «всё до последней версии» без тестов. Сначала измените одну заявленную зависимость, затем проверьте программу и сохраните новый набор версий.
Зафиксируйте проверенный набор версий
После запуска программы и тестов сохраните текущее состояние окружения. Следующая команда создаёт requirements.txt или полностью перезаписывает существующий файл:
python -m pip freeze > requirements.txt
Перед запуском просмотрите старый requirements.txt, если он уже существует: оператор > не объединяет содержимое. В новом файле появятся строки вида package==version. pip freeze записывает как прямые, так и транзитивные зависимости, поэтому результат отражает всё окружение, а не только осознанно выбранные пакеты.
Откройте файл и убедитесь, что в нём нет случайных инструментов из других задач. Чистое окружение на проект помогает избежать лишних строк. Сам requirements.txt нужно хранить в Git; каталог .venv — нет.
Проверьте воспроизведение в новом окружении
Список зависимостей полезен только тогда, когда по нему можно собрать окружение заново. Создайте отдельный тестовый каталог окружения, например .venv-test, и активируйте его. Затем установите сохранённый набор:
python -m pip install -r requirements.txt
python -m pip check
Первая команда читает файл и устанавливает указанные версии, вторая ищет отсутствующие или несовместимые требования среди установленных пакетов. Ожидаемый ответ второй команды — No broken requirements found. Это не проверка поведения вашей программы: после неё всё равно запустите основной сценарий и автоматические тесты.
Если нужной версии больше нет в выбранном индексе или для платформы отсутствует подходящий архив, установка завершится ошибкой. Не удаляйте рабочее окружение до успешной проверки нового. Сначала выясните, можно ли получить пакет из доверенного источника или осознанно обновить зависимость.
Удаляйте пакет через тот же интерпретатор
В учебном окружении Requests можно удалить следующей командой. Она изменяет .venv, поэтому не запускайте её в рабочем проекте до проверки использования пакета:
python -m pip uninstall requests
pip покажет список удаляемых файлов и запросит подтверждение. Команда удаляет выбранный дистрибутив, но не обязана автоматически убрать все ставшие ненужными транзитивные зависимости. Для рабочего проекта сначала удалите использование пакета из кода, проверьте тесты и пересоберите чистое окружение по обновлённому списку.
Не применяйте sudo pip install к системному Python на сервере. Файлами системного интерпретатора управляет пакетный менеджер ОС, а проектные зависимости должны оставаться в .venv.
Подробный порядок подтверждает руководство PyPA Install packages in a virtual environment using pip and venv. Справочник команд находится в официальной документации pip. Следующий урок вернётся к стандартной библиотеке и покажет работу с путями и файлами через pathlib.
Самопроверка
Проверьте, что материал усвоен
Ответьте на все вопросы. Результат сохранится только в этом браузере и будет учтён в статистике прочитанных материалов.
Разбираем коротко
Частые вопросы
Почему лучше запускать python -m pip, а не просто pip?
Так pip запускается тем же интерпретатором Python, который указан в команде. Это уменьшает риск установить пакет в другое окружение.
Что содержит requirements.txt после pip freeze?
Точные версии пакетов, установленных в текущем окружении, включая прямые и транзитивные зависимости. Поэтому окружение перед фиксацией должно быть чистым и относиться к одному проекту.
Можно ли ставить пакеты через sudo pip?
Для проекта так делать не следует: установка может перезаписать файлы системного Python и конфликтовать с пакетным менеджером ОС. Используйте виртуальное окружение без sudo.


