根本原因是开发机与测试机的sys.path和Python解释器环境不一致;需确认which python路径及python -m pip show模块的Location是否匹配,检查__init__.py存在性、项目根目录是否在sys.path中,并确保虚拟环境正确激活。

根本原因不是代码问题,而是两台机器的 sys.path 和 Python 解释器环境不一致。开发机上能跑,只说明它“恰好”满足了模块查找路径;测试机报 ModuleNotFoundError,是 Python 运行时真找不到那个模块——不是没装,是装对了地方、但没在对的路径里。
检查当前解释器和包安装位置是否匹配
这是最常被跳过的一步。开发机和测试机可能都装了 pip install grpcio,但实际装到了不同解释器的 site-packages 下。
- 在两台机器上分别运行:
which python(Linux/macOS)或where python(Windows),确认路径是否一致 - 再执行:
python -m pip show grpcio(把grpcio换成你报错的模块名),看输出里的Location:是否指向同一个 Python 环境的site-packages - 如果测试机显示
Location: /usr/local/lib/python3.9/site-packages,而你的脚本用的是/opt/conda/envs/myenv/bin/python,那这个grpcio就不在它的搜索范围内
验证 sys.path 是否包含项目根目录
尤其当报错的是自定义模块(比如 from data.chanel_detail_makecase import *),问题几乎一定出在这里。PyCharm 默认把项目根设为 Sources Root,会自动加进 sys.path;命令行不会。
- 在出错脚本开头加两行:
import sysprint("sys.path:", sys.path)- 对比开发机和测试机的输出:开发机通常多出项目根路径(如
/home/user/project),测试机只有当前脚本所在目录(如/home/user/project/testcases) - 临时修复:在脚本顶部加
sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__)))),确保根目录优先被查
确认虚拟环境是否激活且被正确调用
测试机上容易漏掉 source .venv/bin/activate 或等效操作,导致 pip 安装进了系统 Python,而脚本却用虚拟环境 Python 执行。
立即学习“Python免费学习笔记(深入)”;
- 不要只看终端提示符有没有
(.venv),要实锤:python -c "import sys; print(sys.executable)" - 如果输出是
/usr/bin/python3,但你想用的是.venv/bin/python,说明没激活或激活失败 - 更稳妥的做法:直接用完整路径运行脚本,例如
.venv/bin/python test_chanel_detail.py,避免歧义 - CI/CD 或 systemd 服务中,必须显式指定解释器路径,不能依赖 shell 激活逻辑
注意 __init__.py 和包结构是否被忽略
测试机可能拉取代码时忽略了空文件,或 Git 配置误删了 __init__.py,导致 Python 不认为那是包。
- 检查报错模块所在目录下是否存在
__init__.py(哪怕为空) - 运行
find . -name "__init__.py" -path "./data/*"(把data替换为你的包名),确认路径存在且可读 - 如果用了相对导入(
from ..utils import helper),必须确保是以包方式运行(python -m package.module),而不是直接python package/module.py
真正卡住人的往往不是“怎么装”,而是“装给谁用”和“从哪找”。测试机上少一个 sys.path 条目、多一个未提交的 __init__.py、或者 CI 脚本里漏写 source,都会让错误看起来毫无规律。动手前先打印 sys.executable 和 sys.path,比盲目重装快十倍。


















