Глиф Учебники

Ошибка externally-managed-environment при pip install

Справочник · Debian · 1 минута чтения

С Debian 12 системный Python помечен как «управляемый извне»: ставить в него пакеты командой pip нельзя, ведь от этого Python зависят программы самой системы. Поэтому pip install отвечает:

Текст
error: externally-managed-environment

× This environment is externally managed

Как ставить пакеты правильно

Есть три правильных способа — выберите свой по задаче.

Библиотека нужна системе или скриптуapt

Многие библиотеки Python есть в Debian готовыми пакетами с именем python3-…:

Bash
apt search python3-requests
sudo apt install python3-requests

Такие пакеты обновляются вместе с системой и не ломают её. Минус — версия может быть не самой свежей.

Дальше: «Чего не делать»

Свой проектвиртуальное окружение venv

Виртуальное окружение — отдельная папка со своей копией Python и своими пакетами. В неё pip ставит что угодно, не трогая систему. В Debian модуль venv вынесен в отдельный пакет:

Bash
sudo apt install python3-venv
python3 -m venv ~/venvs/myproject
~/venvs/myproject/bin/pip install requests

Запускать программу — Python из этой папки: ~/venvs/myproject/bin/python script.py. Или «войдите» в окружение, и тогда python и pip в этом окне терминала будут его собственными:

Bash
source ~/venvs/myproject/bin/activate
pip install requests
deactivate

deactivate выходит из окружения. Без пакета python3-venv создание окружения завершается ошибкой со словами ensurepip is not available.

Дальше: «Чего не делать»

Программа с командойpipx

Если из PyPI (каталога пакетов Python) нужна не библиотека, а готовая программа (утилита командной строки), удобнее pipx: он сам создаёт для каждой программы своё окружение и делает её команду доступной.

Bash
sudo apt install pipx
pipx ensurepath
pipx install имя-программы

pipx ensurepath добавляет папку ~/.local/bin в PATH (список папок, где система ищет команды); после неё откройте новое окно терминала. Вместо имя-программы — название программы на PyPI.

Чего не делать

Ключ --break-system-packages снимает защиту, и pip ставит пакеты прямо в системный Python. Так можно заменить библиотеку, нужную самому Debian, и сломать системные программы, написанные на Python. Не пользуйтесь им и тем более не запускайте sudo pip install.

То же касается удаления файла EXTERNALLY-MANAGED из папки Python: защита пропадёт, а риск останется.

Подробнее о Python, пакетах и окружениях — в курсе Python.