You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

通过shell脚本运行Python文件报ModuleNotFoundError的问题

故障原因

  • 核心触发点是sudo命令的环境变量重置机制:你预先激活的虚拟环境仅作用于当前普通用户的shell会话,执行sudo后会切换到root用户的执行上下文,默认会重置PATH等环境变量,使用系统全局的python3解释器,而非虚拟环境中的解释器。
  • 你通过pip list查看到的opc 0.8.0仅安装在当前激活的虚拟环境中,系统全局Python环境并未安装该依赖,因此脚本执行时会报模块不存在的错误。
  • 直接执行python3 scripts/download.py无报错,是因为此时调用的是虚拟环境内的Python解释器,能正确识别虚拟环境中安装的依赖包。

解决方案

方案1(优先推荐):去掉sudo执行

如果你的build.sh不需要root权限即可完成所有操作,直接执行以下命令即可,此时会继承当前shell的虚拟环境配置:

sh scripts/src/build.sh

如果执行过程中出现权限不足的提示,可先给对应操作目录赋权:

chmod -R 755 /home/ray/Desktop/repo/image-builder

方案2:指定虚拟环境Python的绝对路径

先在已激活虚拟环境的shell中执行which python3,获取虚拟环境Python解释器的绝对路径,示例输出为/home/ray/your_venv_path/bin/python3。
修改build.sh中的调用语句,将python3替换为刚才查到的绝对路径:

/home/ray/your_venv_path/bin/python3 $(pwd)/scripts/download.py -d $dir_name

如果必须使用sudo执行,可加上-E参数保留当前用户的环境变量:

sudo -E sh scripts/src/build.sh

方案3:在build.sh内主动激活虚拟环境

在build.sh的开头添加虚拟环境激活语句,替换为你自己的虚拟环境activate路径即可:

#!/bin/bash
# 开头新增激活语句
source /home/ray/your_venv_path/bin/activate
# 后续原有脚本逻辑保持不变
python3 $(pwd)/scripts/download.py -d $dir_name

内容的提问来源于stack exchange,提问作者ray an

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 17:36:01