【问题标题】:Solve Unable to import module 'lambda_function': cannot import name '_AES'解决 Unable to import module 'lambda_function': cannot import name '_AES'
【发布时间】:2019-11-08 13:34:55
【问题描述】:

我正在尝试部署我的 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 函数与其他外部库一起部署,但从未遇到过这个问题。

【问题讨论】:

  • 这对我现在使用 python2 有效:github.com/Doerge/awslambda-pycrypto 我看到这个编译包中的 _AES.cpython-27m-x86_64-linux-gnu.so 模块缺少所有扩展名,只是命名为_AES.so。有人可以解释为什么我自己编译会导致这种格式和-或错误的格式吗?将它打开一段时间,因为我有兴趣了解为什么为 AWS lambda 编译这个包如此麻烦。

标签: python aws-lambda pycrypto zappa


【解决方案1】:

这对我现在有用使用 python2

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

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

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

【讨论】:

    猜你喜欢
    • 2022-12-28
    • 2022-12-02
    • 2015-03-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多