Python在使用sudo启动时找不到模块

10

我有一个使用Google Assistant Library的脚本,需要从那里导入一些模块。我发现这只能在Python虚拟环境下运行,这真的很奇怪。在同一个文件夹中,我有一个使用GPIO引脚并需要使用root的脚本。它们之间互相交互,所以当我启动GPIO脚本时,Assistant脚本也会启动。但由于某种原因,在以root用户身份启动脚本时,其中的模块无法导入。是否有人知道这方面的问题?


sudo 运行在不同的环境下,您的用户安装的软件包不可用。听起来像是您遇到的问题?为什么不以 root 身份激活虚拟环境呢? - OneCricketeer
安装所有软件包需要使用 root 用户权限,或者创建一个 root venv。 - erip
@cricket_007 听起来没错,但我如何以root身份激活venv呢? - Jan
@Jan 在执行普通步骤激活虚拟环境之前,请输入 sudo su - erip
你不一定需要激活,只需使用脚本运行即可。https://dev59.com/m2ct5IYBdhLWcg3wmOng#11963127 - OneCricketeer
显示剩余2条评论
4个回答

12

不确定,但您尝试了吗:

sudo -E python myScriptName.py

如在此提到这里


我已经尝试过了,但对我没有用。 - Claudio

9

通常情况下,您可以激活虚拟环境并使用环境内的解释器来运行脚本。但这并非必需。

假设您在路径 /path-to-env/env 下有一个虚拟环境,要运行的脚本 example.py 在路径 /path-to-script/example.py 下。

您可以直接运行此 example.py,例如:

sudo /path-to-env/env/bin/python /path-to-script/example.py

这个错误提示只是说sudo: /env/bin/activate: command not found(/env/bin/activate是我的虚拟环境路径)。我需要使用source命令吗? - Jan
你已经创建了虚拟环境吗? 你不需要激活它,尝试按照我写的方式运行你的脚本。 - milo
你的意思是 /path-to-env/env/bin/python /path-to-script/example.py 可以运行,但是加上 sudo 就不能运行了?基本上同样的命令,只是有/没有 sudo 会有不同的表现? - milo
使用sudo时会显示命令未找到。 不使用sudo时会显示权限被拒绝。 - Jan
你可以使用sudo /path-to-env/env/bin/python启动Python交互模式吗? - milo
用sudo /env/bin/python启动它找不到RPi GPIO模块。我需要再次安装模块吗? - Jan

2

最后我只是以管理员身份安装了Python包,一切都正常工作了。 在我的情况下,是通过命令sudo pip3 install findpi进行安装的,然后以sudo findpi的方式执行,工作正常。


2
尝试使用sudo安装模块。
我曾经遇到过Python的'reportlab'模块相同的问题。后来我意识到,我安装了reportlab的安装程序管理器pip时没有使用sudo命令。
问题在于,这个包(pip和reportlab)已经被安装为用户而不是root,因此当您尝试使用sudo时,它无法识别系统路径以查找reportlab,因为您从未安装过它,只是针对用户进行了安装!
我建议始终使用sudo安装pip和模块:

对于Python 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助手库文档):
$ 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

希望这有所帮助!祝好!

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接