You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

AWS Lambda部署Python函数遇cryptography x509导入错误求助

问题分析与解决方法

问题原因

  • 跨平台依赖不兼容:你在Windows上用pip安装的cryptography(azure-storage-blob的底层依赖)是针对Windows编译的二进制版本,而AWS Lambda运行在Linux x86_64环境下,这类平台专属的二进制模块无法在Lambda的Linux运行时中加载,导致找不到cryptography.hazmat.bindings._rust.x509。
  • 本地与运行时环境差异:本地Windows的Python环境和Lambda的Linux Python 3.9在系统库、依赖编译逻辑上完全不同,本地能正常导入不代表打包后的依赖能在Lambda上运行。

解决方法

1. 用Linux环境编译依赖(最可靠)

Lambda的运行环境是Linux,直接在同架构的Linux环境下安装依赖能确保兼容性,推荐用Docker模拟Lambda官方运行时:

  • 拉取Lambda Python 3.9镜像:
    docker pull public.ecr.aws/lambda/python:3.9
    
  • 启动容器并挂载本地项目目录(替换/你的本地项目路径为实际路径):
    docker run -v /你的本地项目路径:/var/task -it public.ecr.aws/lambda/python:3.9 bash
    
  • 在容器内安装依赖到当前目录:
    pip install azure-storage-blob -t .
    
  • 退出容器后,将项目目录下的所有文件(代码+依赖)打包成zip,上传到Lambda即可。

2. Windows本地指定目标平台安装

如果不想切换到Linux,可在Windows PowerShell中通过pip参数强制下载Linux x86_64的预编译依赖:

pip3 install azure-storage-blob --platform manylinux2014_x86_64 --only-binary=:all: --target ./package
  • 安装完成后,将package目录下的所有依赖文件复制到你的Lambda代码所在目录,再一起打包成zip上传。

3. 使用Lambda层管理依赖

将编译好的azure-storage-blob及其依赖打包成zip,创建一个Lambda层,然后在你的Lambda函数配置中添加该层。这种方式可以复用依赖,避免每次打包代码都包含庞大的依赖文件。

内容的提问来源于stack exchange,提问作者Enes

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 13:35:04