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

tri*_*sct 3 python bash sudo 20.04

我正在使用 ubuntu 20.04 编写 python 程序。我通常安装没有sudo前缀的 python 包。但我注意到,如果我进入 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
Run Code Online (Sandbox Code Playgroud)

根模式:

/usr/local/cuda-10.2/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin:
Run Code Online (Sandbox Code Playgroud)

dan*_*zel 7

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

python3 -c "import sys; print(sys.path)"
Run Code Online (Sandbox Code Playgroud)

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

在输出中,您将在主文件夹中看到一个文件夹。这是您用户的 site-packages 目录,这是PEP 370中描述的功能。pip3如果您使用“普通”用户运行它,那么这就是默认安装软件包的目录。

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

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