如何解决虚拟环境下子目录运行代码出现ModuleNotFoundError的问题
报错问题解决方案
1. 先确认执行脚本时已正确激活虚拟环境
虚拟环境不会自动全局生效,在子目录执行脚本前必须先激活主目录下的虚拟环境:
- Windows系统(PowerShell):
先切换到my project根目录,执行.\venv\Scripts\Activate.ps1,如果是CMD环境执行.\venv\Scripts\activate.bat,激活完成后再进入click目录运行脚本即可 - Mac/Linux系统:
先切换到my project根目录,执行source venv/bin/activate,激活完成后再进入click目录运行脚本即可
验证激活是否成功:激活后终端前缀会出现
(venv)标识,执行pip list可看到你安装的所有依赖,确认需要的包都在列表中;也可执行which python(Mac/Linux)/where python(Windows),确认返回的Python路径指向my project目录下的venv文件夹内的解释器。
2. 激活后仍报错的路径修复方案
如果激活虚拟环境后还是报错,大概率是项目自定义模块的导入搜索路径不匹配,可任选以下一种方法解决:
- 临时添加项目根目录到Python搜索路径
在click目录下执行脚本前,先运行对应命令:- Mac/Linux:
export PYTHONPATH="/你的/my project目录的绝对路径:$PYTHONPATH" - Windows PowerShell:
$env:PYTHONPATH = "C:\你的\my project目录的绝对路径;$env:PYTHONPATH"
- Mac/Linux:
- 入口文件固定路径配置
在你要运行的脚本最顶部添加以下代码,自动将项目根目录加入运行时搜索路径:import sys from pathlib import Path # 把当前文件的上两级目录(即my project根目录)加入搜索路径 sys.path.append(str(Path(__file__).parent.parent.resolve()))
3. IDE运行的额外配置
如果你使用PyCharm、VSCode等IDE运行脚本,需要额外做两个配置:
- 在IDE的项目解释器设置中,选择
my project目录下虚拟环境内的Python解释器 - 将
my project目录标记为「源代码根目录(Sources Root)」
内容的提问来源于stack exchange,提问作者B A C H A S H
相关产品推荐
相关产品推荐

