#Что означает ошибка
externally-managed-environment
Начиная с Python 3.11 в дистрибутивах (Debian 12, Ubuntu 23.04+, Fedora 38+, Arch, Homebrew) появился файл-маркер EXTERNALLY-MANAGED — по стандарту . Он говорит pip: «этот Python принадлежит менеджеру пакетов системы, не ставь в него ничего». Установка командой pip install ломала бы системные пакеты, поэтому pip отказывается. Это не баг, а защита.
#Причины и решения
| Возможная причина | Как узнать | Что делать |
|---|---|---|
| Системное окружениеВы пытаетесь установить пакет в Python, которым пользуется система. | pip пишет externally-managed-environment. | Создайте виртуальное окружение. |
Системный PythonPython установлен из apt/dnf/brew, а не из отдельного дистрибутива. | which python3 → /usr/bin/python3. | Используйте venv или pipx. |
Привычка к старому подходуРаньше sudo pip install работал без предупреждений. | Инструкции старше 2023 года. | Обновите подход: venv вместо sudo pip. |
| Нужна установка принудительноКонтейнер или одноразовая VM, где ломать нечего. | Docker-образ или CI. | Откажитесь от обхода PEP 668: создайте venv, используйте pipx или системный пакет дистрибутива. |
#Пошаговое решение
- Установите поддержку venvЕсли при
pip installпоявляетсяerror: externally-managed-environment, это обычно защита системного Python, установленного менеджером пакетов Linux. Не считайте её поломкой pip. В терминале узнайте, какой Python используется:python3 --versionиpython3 -m pip --version; путь в сообщении указывает на системный интерпретатор. Для проекта не выполняйтеsudo pip installи не удаляйте файлEXTERNALLY-MANAGED: так можно повредить приложения дистрибутива. Перейдите к отдельному виртуальному окружению. Перейдите в папку проекта командойcd(путь возьмите из Проводника/файлового менеджера). На Debian/Ubuntu, если команда создания окружения сообщила, чтоensurepipотсутствует, установите системный пакетpython3-venvчерезsudo apt updateиsudo apt install python3-venv; потребуются права администратора. На других дистрибутивах имя пакета может отличаться — смотрите инструкции поставщика. Если установка запрещена на рабочем сервере, обратитесь к администратору вместо попытки обойти ограничение pip. - Создайте виртуальное окружениеВ папке проекта выполните
python3 -m venv .venv. Команда создаёт новый каталог.venvс интерпретатором и инструментами установки. Убедитесь, что каталог появился (ls -aв Linux/macOS); если есть ошибка прав на директорию, выберите папку, где у вас есть доступ на запись, а не запускайте весь проект черезsudo. Не копируйте.venvмежду компьютерами: для воспроизведения храните исходные зависимости отдельно. - Активируйте окружениеАктивируйте окружение для текущего терминала: Linux/macOS —
source .venv/bin/activate, в PowerShell на Windows —.venv\Scripts\Activate.ps1, в CMD —.venv\Scripts\activate.bat. Увидите префикс(.venv)либо проверьте интерпретатор командойpython -c "import sys; print(sys.prefix)". Если PowerShell блокирует запуск сценария, можно вообще не менять политику: используйте.venv\Scripts\python.exe -m pip .... Ошибка после активации обычно означает, что пакет ставится в другой Python. - Устанавливайте пакеты внутри окруженияУстановите нужный пакет из активированного окружения командой
python -m pip install requests, заменивrequestsна зависимость проекта. Для проекта с готовымrequirements.txtиспользуйтеpython -m pip install -r requirements.txt; зависимости лучше брать из доверенного репозитория. Проверка:python -m pip show requestsдолжен показать путь внутри.venv, затем запустите скрипт тем жеpython. При ошибке сети или сертификата решайте именно сетевую проблему, не используйте--trusted-hostкак общий обход. - Для консольных утилит используйте pipxЕсли требуется отдельная консольная программа, а не библиотека для проекта, используйте
pipx, который ставит приложения в собственные окружения. На Debian/Ubuntu установкаpipxможет выполняться черезsudo apt install pipx; затем безsudoвыполнитеpipx ensurepath, переоткройте терминал иpipx install имя-программыдля доверенной утилиты. Не устанавливайте через pipx библиотеку, которую импортирует ваше приложение: она не окажется в виртуальном окружении проекта. - Зафиксируйте зависимостиЗафиксируйте зависимости в файле проекта. Если уже есть
requirements.txtс согласованными версиями — не перезаписывайте его без согласования; если проект новый, можно выполнитьpython -m pip freeze > requirements.txtв активном окружении. Проверьте содержимое файла и добавьте.venv/в.gitignore, чтобы не публиковать установленные пакеты. На другом компьютере создайте новое окружение и установите зависимости из файла. Использование--break-system-packagesдопускается только при осознанном управлении изолированным окружением и не является рекомендуемым исправлением этой ошибки. - Команды для отдельных ситуацийВыберите только подходящий вариант. Это не одна последовательность: часть команд диагностирует проблему, а часть меняет настройки или данные.