python - 解决 无法导入模块 'lambda_function' : cannot import name '_AES'

标签 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 存储库下载了 pycrypto 包,进行了构建并将结果复制到我的 lambda 文件夹中,打包了它但仍然不起作用。

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

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

生成的 AES 文件具有与我的 Mac 操作系统相关的扩展名

Mac Cipher files

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

Linux Cipher Files

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

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

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

最佳答案

这对我来说现在使用 python2 有效:

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

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

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

关于python - 解决 无法导入模块 'lambda_function' : cannot import name '_AES' ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56775625/

相关文章:

python - 批量插入到 MongoDB 中的 GridFS

Python:如何在 twinx 之后制作图例

python - Pandas :合并数据框但对重叠列求和

amazon-s3 - 调整 s3 存储桶/文件夹中现有图像的大小

django - 无服务器 AWS Lambda/Django/Zappa 的异步任务队列

Python PyCrypto RSA 盲与非盲

python - 如何创建一个加密的 django 字段来转换从数据库中检索到的数据?

c++ - 实现图像等高线绘制的基本思路

java - AWS Lambda RequestHandler 用于无效输出

python - 使用 Apache NiFi 解密基于 RSA 的加密