sudo 模式下未找到 python 模块(ubuntu 20.04)

sudo 模式下未找到 python 模块(ubuntu 20.04)

我正在使用 ubuntu 20.04 编写 python 程序。我通常安装不带前缀的 python 包sudo。但我注意到,如果我进入 sudo 模式,然后尝试导入以前安装的 python 包,它会引发ModuleNotFoundError: No module named 'xxx'。但如果我退出 sudo 模式,一切都会恢复正常。

原因可能是什么?可能是因为在 sudo 模式下导入路径未添加到变量中?但如果您检查下面的变量,PATH这似乎不是原因:PATH

普通用户模式:

/usr/local/cuda-10.2/bin:/home/myusername/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin

根模式:

/usr/local/cuda-10.2/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin:

答案1

Python 不使用PATH环境变量。确定在哪里查找模块的过程相当复杂,我不会在这里详细介绍,但最终,所有路径都包含在变量中sys.path。使用以下一行代码打印该列表:

python3 -c "import sys; print(sys.path)"

(请注意,它仅包含现有目录。)

在输出中,您将看到主文件夹中有一个文件夹。这是您用户的 site-packages 目录,此功能在PEP 370pip3。如果您以“普通”用户身份运行它,则该目录是默认安装软件包的目录。

如果您现在切换到root用户,python 将在用户的主文件夹中查找模块root,即/root,因此它不会在“普通”用户的站点包目录中找到包。

出于开发目的,我建议使用虚拟环境,例如venv

答案2

我的问题(在 debian 上)是python运行 python3 并sudo python运行 python2。

通过运行修复sudo python3 app.py

这假定模块已为 root 安装。

答案3

做就是了sudo pip install <package-name>

答案4

对我来说,解决方案不是这样写:

sudo python test.py

写:

sudo /home/dietpi/project/env/bin/python test.py

相关内容