报错是这么冒出来的。老项目用 google-generativeai 0.8 调 gemini-1.5-flash,按提示迁到 google-genai 1.x 之后,from google.generativeai import GenerativeModel 直接 ImportError,原文 No module named 'google.generativeai',依赖里两个包还同时装着。

中间走过弯路,把「客户端初始化从 configure 改成 Client(api_key=...)」当成主因,改完现象没变。

排查方向其实有限,先把可能性排一排。新包叫 google-genai 模块名是 google.genai。也可能是两个包共存 命名空间互相覆盖。

还有一种情况,生成参数从 GenerationConfig 换成 types.GenerateContentConfig。

卸掉旧包再装新包

pip uninstall -y google-generativeai; pip install -U google-genai

接着确认新的 import 路径可用

python -c "from google import genai;print(genai.__version__)"

然后用新客户端发一条最小请求

python -c "from google import genai;c=genai.Client(api_key='$GEMINI_API_KEY');print(c.models.generate_content(model='gemini-1.5-flash',contents='hi').text[:20])"

剩下的就是替换生成参数后跑回归用例

python -m pytest tests/test_gemini.py -q

同事提醒我看一下最近一次发布,时间点确实对得上。

命令输出我都留了记录,免得改完记不清原来的值。

别只看报错消失,验证要多做一步。ImportError 消失,回归用例全绿,日志里不再出现两个包同时加载的警告。

两个包能同时装但只能用一个,迁移先卸干净再装,否则报错会指向一个看起来正常的老模块。监控比日志更早给出信号,事后回看经常能提前半小时发现异常。

作者 9823189