ошибка pip на Ubuntu: внешне управляемая среда × Эта среда управляется внешне

Вопрос или проблема

Я обновил Ubuntu до версии 23.04. Теперь при запуске команды pip (установленной с помощью sudo apt install python3-pip) я получаю следующую ошибку:

$ pip install --user <foobar>
error: externally-managed-environment

× This environment is externally managed
╰─> To install Python packages system-wide, try apt install
    python3-xyz, где xyz — это пакет, который вы пытаетесь
    установить.
    
    Если вы хотите установить пакет Python, которого нет в Debian,
    создайте виртуальную среду с помощью python3 -m venv path/to/venv.
    Затем используйте path/to/venv/bin/python и path/to/venv/bin/pip.
    Убедитесь, что у вас установлен python3-full.
    
    Если вы хотите установить приложение Python, не включенное в Debian,
    возможно, проще использовать pipx install xyz, который создаст и
    будет управлять виртуальной средой от вашего имени. Убедитесь,
    что у вас установлен pipx.
    
    Ознакомьтесь с /usr/share/doc/python3.11/README.venv для получения
    дополнительной информации.

note: Если вы считаете, что это ошибка, пожалуйста, свяжитесь с вашим
поставщиком установки Python или дистрибуции ОС. Вы можете обойти это
предупреждение, но это может привести к повреждению установки Python
или ОС, передав параметр --break-system-packages.
hint: Ознакомьтесь с PEP 668 для подробной спецификации.

Что это значит? Как избежать этой ошибки?

Что, если я хочу установить пакет только для пользователя (--user), а не системно? Как это сделать?

Есть хорошая статья на сайте OMGUbuntu об этом: 3 способа исправить ошибку установки Pip на Ubuntu 23.04

Вот краткое изложение. Есть три способа подойти к этой проблеме:

1. Установить Python пакет используя APT

Например, если вы хотите установить библиотеку Python requests, вы можете установить её с помощью APT, вот так:

sudo apt install python3-requests

Это установит библиотеку на уровне всей системы.

Не все пакеты, доступные на PyPI, были упакованы и включены в репозитории Debian/Ubuntu, поэтому этот метод не сработает для некоторых пакетов.

Или: 2. Создать виртуальную среду с помощью venv или virtualenv

Убедитесь, что venv установлен, запустив:

sudo apt install python3-venv

Чтобы создать новую виртуальную среду в каталоге с именем .venv, выполните:

python3 -m venv .venv

Чтобы активировать эту виртуальную среду (которая изменяет переменную среды PATH), выполните:

source .venv/bin/activate

Теперь вы можете установить библиотеку, такую как requests, в этой виртуальной среде:

pip install requests

Файлы будут установлены в каталог .venv/.

Если вы хотите выйти из виртуальной среды, вы можете выполнить:

deactivate

Если вы не хотите выполнять source .venv/bin/activate и deactivate, вы можете выполнять программу, добавляя к её пути:

$ .venv/bin/pip install requests
$ .venv/bin/python3
>>> import requests
>>> help(requests)

Или: 3. Использовать pipx

pipx позволяет устанавливать и запускать Python приложения в изолированных средах. Это рекомендованный способ установки пакетов PyPI, представляющих консольные приложения.

Чтобы установить pipx, выполните:

sudo apt install pipx

pipx требует, чтобы ~/.local/bin/ находился в вашем PATH. Вы можете автоматически изменить конфигурацию вашей оболочки (например, ~/.bashrc), чтобы модифицировать PATH, выполнив:

pipx ensurepath

(Вам, возможно, потребуется закрыть окно терминала и открыть его снова, чтобы изменения вступили в силу.)

Теперь вы можете установить пакет из PyPI, выполнив:

pipx install pycowsay

И вы можете выполнить команду, которую только что установили, вот так:

$ pycowsay Mooo!

  -----
< Mooo! >
  -----
   \   ^__^
    \  (oo)\_______
       (__)\       )\/\
           ||----w |
           ||     ||

Как видите, pipx установил символическую ссылку в ~/.local/bin/ на исполняемый файл в виртуальной среде:

$ ls -l ~/.local/bin/pycowsay
lrwxrwxrwx 1 flimm flimm 50 May 24 11:19 /home/flimm/.local/bin/pycowsay -> /home/flimm/.local/pipx/venvs/pycowsay/bin/pycowsay*

Или: 4. Указать флаг --break-system-packages:

Если вы хотите проигнорировать предупреждение, вы можете передать флаг --break-system-packages:

pip install --break-system-packages --user <foobar>

Этот метод не рекомендуется, потому что через несколько месяцев или лет вы можете столкнуться с загадочными проблемами, вызванными конфликтующими установками пакетов Python, забыв, что вы использовали --break-system-packages.

В терминале удалите этот файл с помощью команды:

sudo rm /usr/lib/python3.11/EXTERNALLY-MANAGED

и всё будет в порядке!

Я столкнулся с той же ошибкой на Ubuntu 23.04. Я попробовал pip install {package_name} –break-system-packages
Это сработало для меня. Надеюсь, это поможет.
Спасибо.

Быстрое решение этой проблемы — использовать python внутри среды.

1.- Создайте виртуальную среду: python -m venv <env_name>

2.- Активируйте её: source <env_name>/bin/activate

3.- Установите нужный пакет:
sudo venv/bin/python3 -m pip install <package_name>

Это должно решить проблему.

Если у вас настроена virtualenv и вы все еще получаете ошибку, убедитесь, что у папки virtualenv есть правильные разрешения. Я потратил много времени впустую, пока не применил chown для папки с моей учетной записью. Затем не используйте sudo.

Проверьте владельца папки:

  1. Перейдите в родительскую папку

  2. Список владельцев папок с помощью:

    ls -Al
    
  3. Если папка принадлежит root в группе root:

    chown -R username:username ./venvfolder/
    

Я создал виртуальную среду conda,
и столкнулся с той же проблемой с pip,
поэтому conda install kafka-python сработал для меня

Ответ или решение

После обновления до Ubuntu 23.04 при использовании команды pip для установки Python-пакетов вы столкнулись с ошибкой "externally-managed-environment", которая сообщает о том, что ваша среда управляется внешне. Эта ошибка возникает, потому что ваша система теперь придерживается PEP 668, который предписывает, чтобы системные инсталляции Python не мешали управлению пакетами, настроенными вашей операционной системой.

Чтобы решить эту проблему, и в зависимости от ваших нужд в установке, вы можете воспользоваться одним из следующих методов:

1. Установка пакетов с помощью APT

Если пакет, который вы хотите установить, уже доступен в репозиториях Ubuntu, вы можете установить его с помощью APT. Например, для установки библиотеки requests выполните:

sudo apt install python3-requests

Этот метод удобен тем, что гарантирует интеграцию с системой и минимизирует конфликты версий. Однако следует учитывать, что не все пакеты PyPI доступны в репозиториях Ubuntu.

2. Создание виртуальной среды

Для работы с пакетами, не имеющими версий в репозитории, создайте изолированную виртуальную среду:

  1. Убедитесь, что venv установлен:

    sudo apt install python3-venv
  2. Создайте виртуальную среду:

    python3 -m venv .venv
  3. Активируйте её:

    source .venv/bin/activate
  4. Установите необходимые пакеты:

    pip install <имя_пакета>

Таким образом, вы изолируете установленное программное обеспечение от системного Python, тем самым избегая конфликтов.

3. Использование pipx

pipx предназначен для установки и запуска приложений Python в изолированных средах:

  1. Установите pipx:

    sudo apt install pipx
  2. Обеспечьте корректный PATH:

    pipx ensurepath
  3. Установите пакет:

    pipx install pycowsay

Этот метод идеален для установки командных утилит Python.

4. Использование флага –break-system-packages

Если вы хотите игнорировать предупреждение, вы можете использовать флаг --break-system-packages, но это не рекомендуется:

pip install --break-system-packages --user <имя_пакета>

Этот подход может привести к нарушению системы в будущем, так как устанавливаются несовместимые версии пакетов.

Заключение

Наиболее безопасный и рекомендуемый подход — это использование виртуальных сред или pipx. Они обеспечивают максимальную гибкость и надежность при работе с Python-пакетами без риска повреждения системной конфигурации.

Оцените материал
Добавить комментарий

Капча загружается...