#Что означает ошибка
externally-managed-environment
Ошибка externally-managed-environment появилась в Debian 12, Ubuntu 23.04+ и других дистрибутивах после внедрения PEP 668. Дистрибутив пометил системный Python как «управляемый извне» и запретил установку пакетов через pip в глобальное окружение, чтобы pip не конфликтовал с пакетами, поставленными менеджером apt, и не ломал системные утилиты, которые на Python написаны.
Раньше пользователи обходили ограничение флагом --break-system-packages, но это может привести к поломке системных инструментов. Правильные решения — виртуальное окружение, pipx для утилит командной строки и пакеты python3-* из репозитория.
Используйте виртуальное окружение или pipx вместо установки в системный Python.
#Причины и решения
| Возможная причина | Как узнать | Что делать |
|---|---|---|
| Системный Python защищён PEP 668 | При обычной установке pip выводится externally-managed-environment. | Создать .venv внутри проекта и ставить зависимости в него. |
| Нужна отдельная консольная утилита | Цель — запуск внешней команды, а не импорт модуля в свой код. | Использовать pipx в собственной учётной записи. |
| Используется Python дистрибутива | Интерпретатор установлен через apt и обслуживает системные программы. | При необходимости использовать официальный пакет python3-* через apt. |
| Предлагают обойти защиту | Рекомендован --break-system-packages или удаление EXTERNALLY-MANAGED. | Не обходить защиту; выбрать venv, pipx или apt. |
#Пошаговое решение
- Создайте виртуальное окружениеНа Debian/Ubuntu откройте терминал и выполните
python3 --versionиpython3 -m pip --version. Если приpython3 -m pip install ...появляетсяexternally-managed-environment, системная среда управляется пакетным менеджером дистрибутива по правилам PEP 668. Перейдите в каталог своего проекта (cd /путь/к/проекту, заменив путь), проверьтеpwdи выполнитеpython3 -m venv .venv. Если модуль venv не установлен, администратор Debian/Ubuntu может установитьpython3-venvчерезsudo apt install python3-venv; это изменение системы нужно только для подготовки окружения. - Установите пакет внутри негоПосле успешного создания окружения в Linux/macOS выполните
source .venv/bin/activate, затемpython -m pip --version— путь должен указывать внутрь.venv. Теперь установите необходимый пакет, напримерpython -m pip install requests, в том же терминале. Активация необязательна: эквивалентный способ —.venv/bin/python -m pip install requests. Если окружение не создаётся, проверьте владельца и разрешения каталога проекта и наличие места, не запускайтеsudo pipи не используйте--break-system-packages. - Для утилит используйте pipxЕсли нужен не модуль проекта, а отдельная программа командной строки, используйте
pipxкак альтернативу venv. Для Debian/Ubuntu администратор может установитьsudo apt install pipx, после чего обычный пользователь выполняетpipx ensurepathи открывает новый терминал. Затем, например,pipx install blackустанавливает самостоятельную утилиту в изолированное окружение. Успех проверьтеpipx listи командой программыblack --version. Не устанавливайте через pipx библиотеку, которую ваш скрипт импортирует: для библиотек нужен проектный venv. - Системные пакетыЕсли библиотека требуется системной утилите, управляемой дистрибутивом, найдите официальный пакет через
apt search python3-имяи сверяйте точное название с документацией системы; устанавливать его может администратор черезapt. Это другой сценарий, чем разработка проекта внутри.venv. Не изменяйте файлEXTERNALLY-MANAGEDи не используйте--break-system-packages: такое действие нарушает защиту системного Python. После выбора подходящего способа повторите импорт модуля внутри той среды, которая его должна использовать, напримерpython -c 'import requests; print(requests.__version__)'.
#Виртуальное окружение
Для проектов создайте окружение: python3 -m venv .venv, активируйте его командой source .venv/bin/activate и устанавливайте пакеты через pip. Всё остаётся внутри папки проекта и никак не затрагивает систему. Если команда venv не найдена, установите пакет python3-venv.
#pipx для утилит
Программы командной строки (например, yt-dlp, black, httpie) ставьте через pipx: каждая получает собственное изолированное окружение, а команда становится доступной глобально. Установите pipx пакетом apt и выполните pipx install имя.
#Пакеты из репозитория
Некоторые библиотеки есть в apt под именем python3-имя. Они подходят, если вам нужна библиотека для системных скриптов. А флаг --break-system-packages допустим лишь в одноразовых контейнерах, где ломать нечего.
# Debian/Ubuntu: подготовка окружения (если venv отсутствует, apt отдельно с правами администратора)python3 -m venv .venvsource .venv/bin/activatepython -m pip --versionpython -m pip install requests