pip WindowsLinuxmacOSPython 3

pip: Команда pip freeze сохраняет лишние пакеты из глобальной среды

  • Обновлено
  • Чтение ≈ 3 минуты

Краткий ответ

pip freeze может включать неожиданные пакеты, если команда запущена из глобального интерпретатора или venv с доступом к системным site-packages. Важно понять границы среды, а не удалять «лишние» записи по одной.

В этой статье
  1. Что происходит и когда возникает ошибка
  2. Причины и признаки
  3. Подробная диагностика и исправление
  4. Проверка результата и действия при неуспехе

#Что происходит и когда возникает ошибка

pip freeze может включать неожиданные пакеты, если команда запущена из глобального интерпретатора или venv с доступом к системным site-packages. Важно понять границы среды, а не удалять «лишние» записи по одной.

#Причины и признаки

Возможная причинаКак узнатьЧто делать
Работает глобальный Pythonfreeze перечисляет всю видимую установку Python.sys.prefix равен sys.base_prefixСоздать изолированное окружение.
venv создан с system-site-packagesБиблиотеки базового Python доступны внутри venv.В pyvenv.cfg указано include-system-site-packages = trueИспользовать freeze --local либо новое изолированное venv.
Пакеты поставлены для других задачОбщая среда накопила посторонние зависимости.freeze содержит библиотеки, которых нет в явных требованиях проектаСобрать среду по прямым требованиям на копии.

#Подробная диагностика и исправление

  1. Выясните, какой Python выполнит freezeВ том же терминале, где создаётся requirements.txt, выполните команду с путём и префиксами. Если sys.prefix == sys.base_prefix, это глобальный Python; такой снимок нельзя автоматически считать составом одного приложения.
    Linux · Терминал (Bash)Команда
    Диагностика без установки.
    python -c "import sys; print(sys.executable); print(sys.prefix,sys.base_prefix)"
    python -m pip --version
  1. Проверьте настройку venvОткройте текстовый файл pyvenv.cfg в корне своего окружения и найдите include-system-site-packages. Значение true разрешает видеть системные пакеты, false — изолирует их по умолчанию. Не редактируйте этот файл в работающей среде ради быстрой очистки: лучше создать новую.
  1. Сохраните два снимка для сравненияВ активной venv выполните обычный pip freeze и вариант pip freeze --local. При разрешённых системных пакетах --local исключает глобально установленные дистрибутивы. Если оба файла идентичны, причина лишних пакетов не обязательно в системной среде.
  2. В активной venv; создаются два файла в текущей папке
    Linux · Терминал (Bash)Команда
    В активной venv; создаются два файла в текущей папке.
    python -m pip freeze > freeze-all.txt
    python -m pip freeze --local > freeze-local.txt
  1. Определите, какие зависимости нужны самому проектуСравните записи с requirements.txt или pyproject.toml. Транзитивные зависимости тоже нужны и могут не фигурировать среди прямых требований. Не удаляйте всё, что не упомянуто в исходном файле: сначала изучите зависимости через pip show ИМЯ_ПАКЕТА.
  1. Создайте чистое изолированное окружениеИз базового Python создайте новую .venv-clean без флага --system-site-packages. Установите требования проекта и запустите тесты. Если библиотека неожиданно пропала, выясните, нужна ли она как явная зависимость, а не подключайте всю глобальную среду.
    Linux · Терминал (Bash)Команда
    Каталог проекта, обычные права; лучше выполнить до изменения старой .venv.
    python -m venv .venv-clean
  1. Экспортируйте только проверенный наборПосле успешных тестов выполните .venv-clean Python с -m pip freeze и сохраните результат. Не заменяйте основной requirements.txt без оценки того, нужен ли проекту список прямых требований, а не полный снимок транзитивных пакетов.
  1. Перепроверьте независимость от системыЗапустите приложение из новой среды после закрытия исходного терминала. Если работа зависит от системного пакета, зафиксируйте и установите его как заявленную зависимость. При отсутствии подходящего wheel обратитесь к инструкции сборки конкретного проекта.

#Проверка результата и действия при неуспехе

В новой изолированной среде pip freeze отражает только установленные в ней пакеты, а проект проходит проверки. При использовании --local глобальные пакеты исключены из снимка.

Если исправление не помогло, вернитесь к точному сообщению об ошибке, сохраните версию Python, адрес целевого окружения и очищенный от секретов журнал; выясните, на каком шаге результат отличается от ожидаемого. Не изменяйте глобальный Python ради устранения сбоя проекта.

Так эту ошибку тоже называют

Источники и обновления

Последнее обновление статьи: 2 ноября 2026. Версии программ и интерфейсы меняются — если шаги не совпадают с вашей версией, сверяйтесь с документацией производителя.