解决无法导入模块“ lambda_function”的问题:无法导入名称“ _AES”

时间:2019-06-26 14:52:06

标签: python aws-lambda pycrypto zappa

我正在尝试部署我的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相关的扩展名生成的

Mac Cipher files

我尝试在Linux EC2实例上构建该软件包,但仍然遇到相同的错误(尽管文件已更改)

Linux Cipher Files

我根据以下问题尝试了新路径,但仍然失败,并出现了完全相同的错误。

"errorMessage": "Unable to import module 'lambda_function'"

为什么AWS Lambda无法读取pycrypto软件包中的AES模块?我已经将Lambda函数与其他外部库一起部署,但从未遇到过此问题。

1 个答案:

答案 0 :(得分:0)

这现在对我有效使用python2

https://www.github.com/Doerge/awslambda-pycrypto

我刚刚下载了此项目,并用lambda_function.pyCrypto文件夹压缩了pycrypto-2.6.1.dist-info文件。

我看到.so中的已编译Crypto/Cipher/文件(如_AES.so)缺少我的python版本,操作系统架构和发行版(即:AES.cpython-27m-x86_64-linux-gnu.so)。如果我找到一种方法来自行构建软件包,而不是使用第三方编译的库,则将更新我的答案。