环境里同时装了 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,单测全绿,服务正常启动。
兼容层能救急但不能长期用,两个大版本共存时导入结果取决于安装顺序。改动前把原配置备份一份,出问题能马上回滚,这比任何技巧都实用。
