Pipenv依赖哈希不匹配问题求助(跨架构环境)
解决Pipenv跨平台哈希不匹配(pyrsistent==0.18.1)问题
问题根源
pyrsistent==0.18.1在ARM64(Mac M1)和x86_64(Ubuntu 18.04)架构下会生成不同的二进制wheel包,导致哈希值不一致。你在M1上生成的Pipfile.lock记录的是ARM平台的哈希,到Ubuntu流水线自然匹配不上。
可行解决办法
1. 在Ubuntu环境重新生成兼容的锁文件
直接在Ubuntu 18.04(或模拟x86_64的环境)里执行以下命令,保留旧依赖版本的同时生成适配x86平台的锁文件:
pipenv lock --keep-outdated
把新生成的Pipfile.lock提交到代码仓库,流水线就能正常校验哈希了。
2. 临时跳过哈希校验(应急用)
如果暂时没法重新生成锁文件,可以在流水线的安装命令里添加--skip-lock参数跳过哈希检查,但注意这会降低依赖的安全性,只适合临时应急:
pipenv install --keep-outdated --skip-lock o365 shortuuid
3. 指定使用纯Python版pyrsistent
在Pipfile里明确要求pyrsistent使用源码包(纯Python,无平台差异),修改[packages]部分:
[packages] # 其他依赖保持不变 pyrsistent = {version = "==0.18.1", file = "pyrsistent-0.18.1.tar.gz"}
之后执行pipenv lock --keep-outdated重新生成锁文件,纯Python包的哈希在所有平台都是一致的,不会再出现不匹配问题。
4. 升级pyrsistent到无跨平台问题的版本
如果项目允许更新该依赖,pyrsistent 0.19.0及以后的版本修复了跨平台哈希不一致的问题,执行以下命令升级并更新锁文件:
pipenv install pyrsistent>=0.19.0 --keep-outdated
内容的提问来源于stack exchange,提问作者Saurabh Pabhare
相关产品推荐
相关产品推荐

