未使用虚拟环境时Python3部分模块报ModuleNotFoundError的问题
以下是导致这种现象的几个核心原因:
系统Python的路径隔离:Ubuntu通过
apt安装的Python属于系统级环境,其模块存放目录(如/usr/lib/python3.x/site-packages)受系统权限保护,普通用户无法直接写入。若你使用pip install不加sudo,模块会被安装到用户个人目录下的Python路径(~/.local/lib/python3.x/site-packages),但系统Python运行时可能未将此路径纳入搜索范围;若你用sudo python3运行脚本,会切换到root用户环境,而root的Python路径不包含普通用户的模块目录,从而触发ModuleNotFoundError。pip与Python版本不匹配:Ubuntu系统中常同时存在Python2和Python3,默认
pip可能关联Python2的包管理器。若你直接执行pip install flask,模块会被安装到Python2环境中,但你运行脚本用的是python3,自然找不到对应模块。即便用pip3 install,也可能因系统Python的路径优先级设置,导致安装的模块无法被识别。虚拟环境的独立性:虚拟环境(venv)会创建一套完全独立的Python运行环境,拥有专属的
site-packages目录和pip工具。激活虚拟环境后,系统会优先使用该环境的Python解释器和模块路径,完全隔离于系统级或其他用户的Python环境,因此你安装的模块能被精准找到,不会出现冲突或路径问题。系统Python的包管理限制:Ubuntu的系统Python通常推荐通过
apt管理模块(如sudo apt-get install python3-flask),若你用pip安装的模块与apt维护的版本冲突,或系统Python配置限制了非apt安装模块的使用,也会导致模块无法被识别。而虚拟环境不受系统包管理规则约束,可自由安装任意版本的模块。
内容的提问来源于stack exchange,提问作者Mayank Mahajan

