У меня есть скрипт, который использует библиотеку Google Assistant и должен импортировать оттуда некоторые модули. Я понял, что это работает только в виртуальной среде Python, что действительно странно. В той же папке у меня есть скрипт, который использует контакты GPIO и должен использовать root. Они взаимодействуют друг с другом, поэтому, когда я запускаю скрипт GPIO, запускается и скрипт Assistant. Но по какой-то причине модули там не могут импортироваться, когда скрипт запускается с правами root. Кто-нибудь знает что-нибудь об этом?
Python не может найти модуль при запуске с помощью sudo
Ответы (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
Попробуйте установить модуль с помощью 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
Надеюсь это поможет! С уважением!
не уверен на 100%, но вы пробовали:
sudo -E python myScriptName.py
Как упоминалось здесь
sudo
работает в другой среде, и пакеты, установленные пользователем, недоступны. Похоже на вашу проблему? Почему бы вам не активировать virtualenv как root? - person OneCricketeer   schedule 11.06.2017venv
. - person erip   schedule 11.06.2017sudo su
, а затем ваши обычные шаги по активации venv. - person erip   schedule 11.06.2017