解决Unable to import module 'lambda_function': cannot import name '_AES'

Solve Unable to import module 'lambda_function': cannot import name '_AES'

我正在尝试部署我的 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'

我检查了 问题并从此 git 存储库下载了 pycrypto 包,进行构建并将结果复制到我的 lambda 文件夹,打包它但仍然无法正常工作。

我检查了构建的结果,我注意到在这个文件夹中:

pycrypto-2.6.1/build/lib.linux-x86_64-3.7/Crypto/Cipher

生成的 AES 文件带有与我的 Mac OS

相关的扩展名

我尝试在 Linux EC2 实例上构建包,但仍然出现相同的错误(尽管文件发生了变化)

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

为什么 AWS Lambda 无法读取 pycrypto 包中的 AES 模块?我已经使用其他外部库部署了 Lambda 函数,但从未遇到过这个问题。

这对我有用使用python2

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

我刚刚下载了这个项目并将我的 lambda_function.py 文件压缩到 Cryptopycrypto-2.6.1.dist-info 文件夹中。

我看到 Crypto/Cipher/ 中编译的 .so 文件(如 _AES.so)缺少我的 python 版本和 OS 体系结构和发行版(即:AES.cpython-27m-x86_64-linux-gnu.so)。如果我找到自己正确构建包的方法而不是使用第三方编译的库,我会更新我的答案。