从旧机器拷了一个 xxx-1.2.0-cp38-cp38-win_amd64.whl 过来,pip install 报 is not a supported wheel on this platform。项目已经换到 Python 3.12。乍看像缓存或者权限的锅,追下去往往不是。
pip debug --verbose python -c "import sys; print(sys.version_info)"
追下去是这么回事:文件名里的 cp38 是编译时用的 CPython ABI 版本,C 扩展直接链接解释器符号,跨小版本都不保证兼容。3.12 的 pip 只接受 cp312 或 abi3 这类标签。
「C 扩展 ABI 不兼容」相关的验证我通常做两遍,改完一次、隔天再看一次,确认不是临时生效。接口问题先分清是没发出去、发出去了没收到,还是收到了处理失败。
偶发问题先统计频率,一小时几次和一天一次,查法完全不同。改完顺手把文档补一句,省得下次自己重新推一遍。
监控和日志的时间要对上,时区不一致会多绕很大一圈。临时改动用注释写上日期和原因,过两周自己都记不清为什么这么写。
具体做法是,用 pip debug --verbose 看当前解释器接受哪些标签;换 cp312 或 cp312-abi3 的 wheel 不要手动改文件名;没有对应 wheel 就在目标机器上从源码编译 保证解释器和编译器版本一致;多版本共存时给每个 Python 单独建 venv 不要共用 site-packages。
验收就看一点,pip debug 输出的 compatible tags 里有 cp312 安装时不再报 not a supported wheel。
