我正在尝试部署我的lambda函数,该函数使用pycrypto的模块Crypto.Cipher AES进行请求并解密数据。这就是我的导入内容:
import boto3
from botocore.vendored import requests
import gzip
from io import StringIO, BytesIO
import base64
import sys
from datetime import datetime
import time
from Crypto.Cipher import AES
我在本地Mac环境中运行代码,它可以完美运行,但是当我将程序包上传到AWS Lambda并对其进行测试时,出现以下错误:
Unable to import module 'lambda_function': cannot import name '_AES'
我检查了this问题,并从此git repo下载了pycrypto软件包,进行了构建并将结果复制到我的lambda文件夹中,打包后仍然无法使用。
我检查了构建结果,发现在此文件夹中:
pycrypto-2.6.1/build/lib.linux-x86_64-3.7/Crypto/Cipher
AES文件是使用与我的Mac OS相关的扩展名生成的
我尝试在Linux EC2实例上构建该软件包,但仍然遇到相同的错误(尽管文件已更改)
我根据以下问题尝试了新路径,但仍然失败,并出现了完全相同的错误。
"errorMessage": "Unable to import module 'lambda_function'"
为什么AWS Lambda无法读取pycrypto软件包中的AES模块?我已经将Lambda函数与其他外部库一起部署,但从未遇到过此问题。
答案 0 :(得分:0)
这现在对我有效使用python2 :
https://www.github.com/Doerge/awslambda-pycrypto
我刚刚下载了此项目,并用lambda_function.py
和Crypto
文件夹压缩了pycrypto-2.6.1.dist-info
文件。
我看到.so
中的已编译Crypto/Cipher/
文件(如_AES.so
)缺少我的python版本,操作系统架构和发行版(即:AES.cpython-27m-x86_64-linux-gnu.so
)。如果我找到一种方法来自行构建软件包,而不是使用第三方编译的库,则将更新我的答案。