aiohttp 3.14.4 不能搭配 multidict 7,修复在 3.14.5
aiohttp 3.14.4 与 multidict 7 没有声明交集,pip 的依赖冲突不是下载失败。3.14.5 已正式放宽上界,按项目约束更新并验证真实业务。
同时安装 aiohttp==3.14.4 和 multidict==7.0.0,pip 提示 ResolutionImpossible,并列出 aiohttp 3.14.4 depends on multidict<7.0 and >=4.5。这里先处理声明范围冲突,不要先换下载镜像或强制忽略依赖。
即使开发分支已经放宽上界,正式 3.14.4 的元数据仍拒绝 multidict 7。解析器看到的是发行物中声明的要求,不会因为主分支可以搭配就自动越过这个上界。
3.14.5 已正式放宽到小于 8
正式 aiohttp 3.14.5 的依赖声明是 multidict >= 4.5, < 8.0,因此包含 7.0.0。这项放宽已经进入 3.14 维护线,不必为了它安装开发分支或跨到预发行版本。
先核对项目和上层库是否允许更新 aiohttp,并保存锁文件。在兼容环境中更新这个约束,再让项目原来的解析流程生成锁定结果。下面仅展示依赖声明的目标组合,不是覆盖整份项目配置的指令:
aiohttp==3.14.5
multidict==7.0.0
3.14.5 要求 Python 3.10 或更高,不能只改 aiohttp 版本而忽略解释器。这个组合解决的是 aiohttp 自己的 multidict 上界;其他依赖仍可能要求 multidict 6,或限制 aiohttp 版本,需要继续沿解析器给出的约束链核对。
暂时不能升级 aiohttp,就保留满足旧上界的 multidict
仍必须使用 aiohttp 3.14.4 的项目,可以在自身兼容要求允许时采用小于 7 的 multidict 版本。具体选择应来自项目锁定与验证结果,不宜只为让解析通过任意选一个历史包。
如果另一个必要依赖明确要求 multidict 7,两边没有交集,就需要调整那组依赖或等待兼容版本。--no-deps 只跳过解析,不会把两个约束变成兼容组合;手工改 site-packages 中的元数据也不会改变库的真实接口。
日志里附带的“某些包没有可用发行物”不应盖过已经明确列出的版本冲突。先比较两个约束是否存在交集;交集恢复后若仍缺 wheel,再按 Python 版本、架构和索引中的真实文件排查。
验收要确认锁定文件选中了预期的 aiohttp 与 multidict,安装时不再越过约束,并通过应用原有的 HTTP 与多值头部处理检查。安装成功只证明依赖解出来,不代表上层业务已经兼容新 multidict。出现行为差异时,恢复保存的整套锁定环境,再单独定位接口变化,不要在同一个环境反复强装覆盖。


