модуль python не найден в режиме sudo (ubuntu 20.04)

Я использую ubuntu 20.04 для написания программ на Python. Я обычно устанавливаю пакеты python без префикса sudo . Но я заметил, что если я перейду в режим sudo, а затем попытаюсь импортировать ранее установленный пакет python, он вызовет ошибку ModuleNotFoundError: Нет модуля с именем 'xxx' . Но если я выйду из режима sudo, все снова будет в порядке.

В чем может быть причина? Может быть, в режиме sudo путь импорта не добавляется в переменную PATH ? Но это не похоже на причину, если вы проверите мои переменные PATH ниже:

Обычный режим пользователя:

/usr/local/cuda-10.2/bin:/home/myusername/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin

Корневой режим:

/usr/local/cuda-10.2/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin:
0
задан 21 August 2020 в 08:37

1 ответ

Python не использует переменную среды PATH . Процесс определения того, где искать модули, довольно сложен, и я не буду здесь вдаваться в подробности, но в конечном итоге все пути содержатся в переменной sys.path . Используйте следующий однострочник для печати этого списка:

python3 -c "import sys; print(sys.path)"

(Обратите внимание, что он содержит только существующие каталоги.)

На выходе вы увидите папку внутри вашей домашней папки. Это каталог пакетов сайта вашего пользователя, функция, описанная в PEP 370 . И это каталог, в который pip3 по умолчанию устанавливает пакеты, если вы запускаете его от своего «обычного» пользователя.

Если вы теперь переключитесь на пользователя root , python будет искать модули в домашней папке пользователя root , то есть / root , поэтому он не сможет найти пакеты в каталоге пакетов сайта «обычного» пользователя.

В целях разработки, Я бы рекомендовал использовать виртуальные среды, такие как venv .

0
ответ дан 24 August 2020 в 08:20

Другие вопросы по тегам:

Похожие вопросы: