环境里同时装了 pydantic 1.10 与 2.5,服务启动抛 PydanticImportError,提示 BaseSettings 已经迁移到 pydantic-settings,进程起不来。

原因不止一个,得分开看。两个大版本共存 元包指向不确定;BaseSettings 在 2.x 被拆到独立包;第三方库仍在用 1.x 的 API;requirements 没有版本约束。

先看实际加载的是哪个版本

python -c "import pydantic;print(pydantic.VERSION, pydantic.__file__)"

然后统一升到 2.x 并装兼容包

pip install -U "pydantic>=2.5" pydantic-settings

再往下用兼容层过渡旧代码

python -c "from pydantic.v1 import BaseModel;print('v1 layer ok')"

锁定版本后跑一遍单测

pip freeze | findstr pydantic

我习惯把每一步的执行时间和结果记在一边,后面复盘省事。

改之前我把相关日志按时间截了一段存着,事后对时间线用得上。

中途换过一次思路,把范围缩到最小的那一层,反而快了。

中间停过一次,把已经改的东西回滚干净,再重新来一遍。

同样的操作我在测试机上先走了一遍,线上只做验证过的部分。

改完先别撤,确认这几项。导入不再抛 PydanticImportError,单测全绿,服务正常启动。

兼容层能救急但不能长期用,两个大版本共存时导入结果取决于安装顺序。改动前把原配置备份一份,出问题能马上回滚,这比任何技巧都实用。

作者 9823189