我正在使用 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
根模式:
/usr/local/cuda-10.2/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin:
Python 不使用
PATH
环境变量。确定它在哪里寻找模块的过程相当复杂,我不会在这里详细介绍,但最后,所有路径都包含在sys.path
变量中。使用以下单行打印该列表:(请注意,它仅包含现有目录。)
在输出中,您将在主文件夹中看到一个文件夹。那是您用户的站点包目录,这是PEP 370中描述的功能。
pip3
如果您使用“普通”用户运行它,那是默认安装软件包的目录。如果您现在切换到
root
用户,python 将在root
用户的主文件夹(即/root
.出于开发目的,我建议使用虚拟环境,例如
venv
.我的问题(在 debian 上)是
python
运行 python3 并sudo python
运行 python2。通过运行修复
sudo python3 app.py
这假设模块是为 root 安装的。