0


cryptography构建报错(Could not build wheels for cryptography)

1、问题描述:

一个经常开发的python项目,在今天打包镜像的时候突然报错,报错内容如下:

Failed to build cryptography
ERROR: Could not build wheels for cryptography, which is required to install pyproject.toml-based projects

2、排查过程:

使用“Could not build wheels for cryptography, which is required to install pyproject.toml-based projects”去网络上搜集解决方法,都没有解决。接着,尝试重新初始化项目环境后重新打包镜像,还是报一样的错误。

很是迷惑...因为项目配置的几个依赖包版本号近期都没有变动过,怎么在今天突然报错了...

接着,想从报错日志中捞取更多的报错信息,使用“error”搜日志中初始报错的位置,发现报错如下:

build/temp.linux-x86_64-cpython-38/_openssl.c:2304:7: error: 'EVP_PKEY_CTX_set_rsa_oaep_md' redeclared as different kind of symbol

https://github.com/pyca/cryptography/issues/5893这里可以看到解释,是openssl 3.0.0的bug导致的,所以判断是openssl版本的导致的。

查看dockerfile里面openssl,安装时没有指定版本,所以openssl默认应该是使用的最新的3.0.0了。查看了openssl的版本号,3.0.0的上一个版本是1.1.1,所以指定openssl的版本号=1.1.1后重新尝试打包镜像,发现可以镜像打包成功了!!

3、解决步骤:

  1. 在基础镜像中查询openssl版本
docker run -it python:3.8-alpine /bin/sh
  1. 查询openssl版本的写法
apk update
apk search openssl

  1. 更改openssl版本号为“openssl1.1-compat-dev”后重新打包镜像即可

4、个人总结:

这个问题排查花了很长时间,原因如下:

  1. 一开始一直以日志最后给出的报错信息去网上各种搜索,即使用“Could not build wheels for cryptography, which is required to install pyproject.toml-based projects”,尝试了很多方法浪费了比较多的时间;

  1. 接着又不断尝试更改项目几个依赖包的版本号,结果改了几个后重新构建又会报版本号冲突(不能随便改);

  2. 还尝试了不断去重新初始化项目环境后重新构建...

可见以上排查问题的思路比较单一,完全属于没有找准关键报错信息的胡乱尝试...

以后,如果遇到类似的问题,我会尝试:

  1. 从报错日志中找到第一个报错的日志信息位置(可以使用“error”关键字等去定位到第一个),然后逐个从上往下去排查,或者也可以从最后一行报错信息从下往上去查询其他error报错,总之不能死盯着最后一个位置的报错信息去搜查原因;

  2. 如果项目一直构建很正常,突然某天构建报错的话,可以从“依赖包未指定版本号而自动安装了最新版本导致不兼容”的角度去思考下。

标签: docker

本文转载自: https://blog.csdn.net/keepgoingand/article/details/128887647
版权归原作者 keepgoingand 所有, 如有侵权,请联系我们删除。

“cryptography构建报错(Could not build wheels for cryptography)”的评论:

还没有评论