Python не может найти модуль при запуске с помощью sudo

У меня есть скрипт, который использует библиотеку Google Assistant и должен импортировать оттуда некоторые модули. Я понял, что это работает только в виртуальной среде Python, что действительно странно. В той же папке у меня есть скрипт, который использует контакты GPIO и должен использовать root. Они взаимодействуют друг с другом, поэтому, когда я запускаю скрипт GPIO, запускается и скрипт Assistant. Но по какой-то причине модули там не могут импортироваться, когда скрипт запускается с правами root. Кто-нибудь знает что-нибудь об этом?


person Jan    schedule 11.06.2017    source источник
comment
sudo работает в другой среде, и пакеты, установленные пользователем, недоступны. Похоже на вашу проблему? Почему бы вам не активировать virtualenv как root?   -  person OneCricketeer    schedule 11.06.2017
comment
Я полагаю, установите все свои пакеты как root. Или создайте корень venv.   -  person erip    schedule 11.06.2017
comment
@cricket_007 Звучит правильно, но как я могу активировать venv как root?   -  person Jan    schedule 11.06.2017
comment
@Jan sudo su, а затем ваши обычные шаги по активации venv.   -  person erip    schedule 11.06.2017
comment
Вам не обязательно активировать, просто запустите скрипт, используя его. stackoverflow.com/a/11963127/2308683   -  person OneCricketeer    schedule 11.06.2017
comment
Активация @erip с помощью sudo не работает, просто пишет, что команда не найдена.   -  person Jan    schedule 11.06.2017
comment
@cricket_007 cricket_007 Я активировал его с помощью source env/bin/activate, и, поскольку я на самом деле не профессионал в Python, я не знаю, как это сделать сейчас:/   -  person Jan    schedule 11.06.2017


Ответы (3)


Обычно вы можете активировать виртуальную среду и использовать интерпретатор внутри среды для запуска вашего скрипта. Но это не обязательно.

Предположим, у вас есть виртуальная среда по пути /path-to-env/env, скрипт, который вы хотите запустить, example.py находится по пути /path-to-script/example.py.

вы уже можете запустить этот пример.py как

sudo /path-to-env/env/bin/python /path-to-script/example.py
person milo    schedule 11.06.2017
comment
Это говорит только о том, что sudo: /env/bin/activate: команда не найдена (/env/bin/activate — это путь к моему venv). Нужно ли мне получать это? - person Jan; 11.06.2017
comment
Вы уже создали виртуальную среду? Вам не нужно активировать его, попробуйте запустить свой скрипт, как я написал. - person milo; 11.06.2017
comment
вы имеете в виду, что /path-to-env/env/bin/python/path-to-script/example.py работает, но не работает с sudo? в основном та же команда, только с/без sudo ведет себя по-разному? - person milo; 11.06.2017
comment
С sudo пишет, что команда не найдена. Без sudo пишет отказ в доступе. - person Jan; 11.06.2017
comment
Вы можете запустить интерактивный режим Python, используя sudo /path-to-env/env/bin/python? - person milo; 11.06.2017
comment
Запуск с помощью sudo /env/bin/python не находит модуль GPIO RPi. Нужно ли для этого снова устанавливать модули? - person Jan; 11.06.2017

Попробуйте установить модуль с помощью sudo.

У меня была такая же проблема с модулем «reportlab» из python. Я понял, что установил pip (менеджер установки для reportlab) без команды sudo.

Проблема в том, что пакет (pip и reportlab) был установлен как пользователь, а не как root, поэтому, когда вы пытаетесь использовать sudo, он не распознает системный путь к reportlab, потому что вы никогда не устанавливали в первое место, только для пользователя!

Я рекомендую всегда устанавливать pip и модуль с помощью sudo:

Для питона 2:

$ sudo add-apt-repository universe
$ sudo apt update
$ sudo curl https://bootstrap.pypa.io/get-pip.py --output get-pip.py
$ sudo python2 get-pip.py
$ sudo pip install google-assistant-library

Для Python 3 (из библиотеки Google Assistant Документов):

$ sudo apt-get update
$ sudo apt-get install python3-dev python3-venv
$ sudo python3 -m venv env
$ sudo env/bin/python -m pip install --upgrade pip setuptools
$ sudo source env/bin/activate
$ sudo python -m pip install --upgrade google-assistant-library

Надеюсь это поможет! С уважением!

person Stéfano Oliveira    schedule 20.08.2020

не уверен на 100%, но вы пробовали:

sudo -E python myScriptName.py

Как упоминалось здесь

person Giorgos Xou    schedule 14.03.2021