无法使用sudo运行Python脚本

11

我有一个简单的脚本,它使用signalr-client-py作为外部模块。

from requests import Session
from signalr import Connection
import threading

我尝试使用sudo python myScriptName.py运行我的脚本时出现错误:

Traceback (most recent call last):
  File "buttonEventDetectSample.py", line 3, in <module>
    from signalrManager import *
  File "/home/pi/Desktop/GitRepo/DiatAssign/Main/signalrManager.py", line 2, in <module>
    from signalr import Connection
ImportError: No module named signalr
如果我只输入python myScriptName.py,我的脚本可以正常运行,但是后面需要在前面加上sudo,因为后来在我的其他脚本中(使用此脚本)我会对文件系统执行写操作。 我对Python还很陌生,这就是为什么我需要知道如何处理这种情况。 如果我键入pydoc modules,我会得到一个包含以下内容的列表:
signalr
signalrManager
如果我输入pip freeze,我可以看到列出来的内容:
signalr-client==0.0.7

运行命令“sudo which python”和“which python”,它们的结果是否不同? - ma3oun
它们都返回 '/usr/bin/python'。 - user2128702
3个回答

17

默认情况下,sudo会在不同的环境中运行命令。你可以使用-E选项要求sudo保留环境。

sudo -E python myScriptName.py

它自带安全风险,请小心。


这个可以工作,但我不确定我使用的外部包/模块/库到底有什么问题。 - user2128702

1

您需要检查SignalR的安装位置。sudo在root环境中运行程序,如果SignalR没有全局安装,则无法被拾取。尝试使用'sudo pip freeze'命令查看root环境中可用的内容。


我看不到我的模块,但我相信我收到的错误信息恰好说明了这一点,所以这是可以预料的。不太确定如何将其保存在我的根目录中。我可以复制/粘贴它吗?还是这样做是错误的? - user2128702
我不太确定你想要复制/粘贴什么,也不确定在这种情况下“我的模块”是什么意思,因为我不认为你编写的模块会出现在pip freeze中。我认为你需要做的是要么使用“sudo pip install signalr”或包含signalr的其他软件包,要么按照其他答案中的建议使用sudo的“-E”开关。 - Paula Thomas

0

另一个简单的解决方案是通过sudo安装所需的软件包-即使它们以前已经正常安装-而不是尝试匹配路径:

sudo pip3 install <your-required-package-name>

之后,您可以通过sudo执行脚本。


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