【问题标题】:Python can't find module when started with sudo使用 sudo 启动时 Python 找不到模块
【发布时间】:2017-06-11 12:51:26
【问题描述】:

我有一个使用 Google 助理库的脚本,并且必须从那里导入一些模块。我发现这只适用于 Python 虚拟环境,这真的很奇怪。在同一个文件夹中,我有一个使用 GPIO 引脚并且必须使用 root 的脚本。它们相互交互,所以当我启动 GPIO 脚本时,Assistant 脚本也启动了。但是由于某种原因,当脚本以 root 启动时,其中的模块无法导入。有人知道吗?

【问题讨论】:

  • sudo 在不同的环境下运行,并且您的用户安装的软件包不可用。听起来像你的问题?为什么不以 root 身份激活 virtualenv?
  • 我想以 root 身份安装所有软件包。或者创建一个根venv
  • @cricket_007 听起来不错,但是如何以 root 身份激活 venv?
  • @Jan sudo su 然后按照正常步骤激活 venv。
  • 您不一定需要激活,使用它运行脚本即可。 stackoverflow.com/a/11963127/2308683

标签: python module root gpio google-assistant-sdk


【解决方案1】:

通常你可以激活一个虚拟环境并使用环境中的解释器来运行你的脚本。不过没必要。

假设您在路径 /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 是我的 venv 的路径) 我需要来源吗?
  • 您是否已经创建了虚拟环境?你不需要激活它,试着像我写的那样运行你的脚本。
  • 你的意思是 /path-to-env/env/bin/python /path-to-script/example.py 有效,但它不适用于 sudo?基本相同的命令只是带有/out sudo 的行为不同?
  • 用 sudo 它说找不到命令。没有 sudo 它表示权限被拒绝。
  • 可以使用sudo /path-to-env/env/bin/python启动python交互模式吗?
【解决方案2】:

不是 100% 确定,但您尝试过吗:

sudo -E python myScriptName.py

如提到的here

【讨论】:

    【解决方案3】:

    尝试使用 sudo 安装模块。

    我对 python 的模块“reportlab”有同样的问题。我意识到我在没有 sudo 命令的情况下安装了 pip(reportlab 的安装程序管理器)。

    问题是软件包(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(来自Docs Google assistant library):

    $ 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
    

    希望这会有所帮助!问候!

    【讨论】:

      【解决方案4】:

      我最终只是将 python 包安装为 sudo,它运行良好。就我而言,它是sudo pip3 install findpi,然后以sudo findpi 执行并工作。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-06-21
        • 2022-11-11
        • 2012-10-11
        • 1970-01-01
        • 1970-01-01
        • 2016-01-14
        • 2020-01-06
        相关资源
        最近更新 更多