我在 GCP Cloud 构建中运行的 CI/CD 管道中遇到了这个奇怪的错误。
软件包安装失败... KeyError: 'Name' site-packages/pipenv/vendor/importlib_metadata/_adapters.py:54 运行时一切都在本地工作
.pipenv install
我正在跑步
python 3.11.4
。
我遵循的故障排除步骤是:
Pipfile.lock
并再次运行pipenv install
不起作用。pipenv --rm
并删除缓存pip cache purge
然后再次重新创建环境pipenv shell && pipenv install
没有解决问题。importlib_metadata==8.0.0
中的重大更改引起,解决方法是只需固定版本importlib-metadata==7.2.1
,所以我继续应用更改,但不幸的是它没有解决问题。pipenv graph | grep "importlib"
,并且 importlib 的所有依赖项都指向该 7.2.1
版本。运行并验证构建是否在 docker 中正常工作后,使用:
docker buildx build --platform linux/arm64 -t fakename -f Dockerfile .
我发现
pipenv
通过一路正确构建图像来正确解决依赖关系。然后我发现我在kaniko
中有这个设置:
--cache=true
然后我通过执行
--cache=true
禁用了它,它起作用并解决了问题,不幸的是,这会减慢构建速度,但我现在没有选择。
cache
,而是使用cache-ttl
:--cache=true
--cache-ttl=24h
它第一次工作了,但过了一会儿,也许 2 小时后,它导致我遇到了同样的问题,所以不幸的是我回滚了更改。
--cache-repo
设置,这给了我以下组合:--cache=true
--cache-ttl=24h
--cache-repo=myrepo
也许这将避免其他缓存存储库覆盖此存储库中缓存的依赖项,并将为我提供缓存所需的粒度(我尚未对此进行测试)。