【问题标题】:Cannot run Python script using sudo无法使用 sudo 运行 Python 脚本
【发布时间】:2018-10-23 05:56:37
【问题描述】:

我有一个简单的脚本,它使用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”会产生不同的结果吗?
  • 它们都产生'/usr/bin/python'

标签: python pip sudo


【解决方案1】:

默认情况下 sudo 在不同的环境中运行命令。 您可以使用-E 开关要求 sudo 保护环境。

sudo -E python myScriptName.py

它有自己的安全风险。所以要小心

【讨论】:

  • 这个可行,但我不确定我正在使用的外部包/模块/库到底是什么问题。
【解决方案2】:

您需要检查信号器的安装位置。 sudo 在 root 可用的环境中运行程序,如果未全局安装 signalr,则不会被拾取。尝试 'sudo pip freeze' 以查看根环境中可用的内容。

【讨论】:

  • 我在那里看不到我的模块,但我相信我得到的错误消息正是如此,所以这是意料之中的。不太确定如何将其保存在我的根目录中。我可以以某种方式复制/粘贴它吗?或者这是错误的?
  • 不太确定您打算复制/粘贴什么,在这种情况下我也不确定“我的模块”是什么意思,因为我不希望您编写的模块出现在点冻结中反正。我认为您可能需要做的是“sudo pip install signalr”或任何包含 signalr 的软件包,或者按照其他答案中的建议并使用 sudo 的“-E”开关。
猜你喜欢
  • 2015-03-24
  • 1970-01-01
  • 2017-12-22
  • 2021-03-30
  • 2016-06-18
  • 2017-12-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多