Python3.8的AWS Lambda函数导入报错:urllib3与OpenSSL版本不兼容
问题分析与解决方案
核心原因
- AWS Lambda Python 3.8运行时内置的OpenSSL版本为1.0.2k,低于urllib3 v2.0要求的1.1.1+标准
- 尽管你在Pipfile中指定了
urllib3 = "1.26.6",但openai的依赖可能间接拉取了urllib3 v2.x版本,导致版本冲突;且本地虚拟环境的配置无法覆盖Lambda运行时的系统级OpenSSL限制
解决方案
方案1:升级Lambda运行时(推荐)
将Lambda函数的运行时从Python 3.8切换至Python 3.9或更高版本(如Python 3.10):
- Python 3.9+的Lambda运行时内置OpenSSL 1.1.1及以上版本,完全满足urllib3 v2.x的要求
- 无需修改依赖配置,直接兼容最新版
openai和相关依赖
方案2:锁定依赖版本并重新打包(适用于必须保留Python 3.8的场景)
- 修正Pipfile,强制锁定依赖版本
修改Pipfile内容如下:[[source]] name = "pypi" url = "https://pypi.org/simple" verify_ssl = true [dev-packages] [packages] src = {editable = true, path = "./src"} openai = "<1.0" # 指定兼容urllib3 1.x的openai版本范围 urllib3 = "~=1.26.6" # 固定小版本更新,避免自动升级到2.x [requires] python_version = "3.8" - 生成锁定文件并重新安装依赖
执行以下命令确保依赖完全符合配置:pipenv lock --clear pipenv install --deploy - 验证依赖树
运行pipenv graph确认输出中无urllib3>=2.0的条目,确保openai的依赖未间接升级urllib3 - 在兼容环境中打包部署包
使用Amazon Linux 2系统或Docker模拟Lambda环境进行打包,避免本地系统库不兼容问题:# 进入虚拟环境 pipenv shell # 安装依赖到指定目录 pip install -r <(pipenv requirements) -t ./package # 将代码和依赖合并打包 cp index.py ./package/ cd package && zip -r ../lambda-deploy.zip .
方案3:使用Lambda层隔离依赖
将urllib3==1.26.6和兼容的openai依赖打包为Lambda层,附加到Python 3.8的Lambda函数上,确保运行时优先使用层中的依赖版本,避免与内置环境冲突
内容的提问来源于stack exchange,提问作者Sulove Dahal
相关产品推荐
相关产品推荐

