【问题标题】:Importing PyNaCl into Lambda Function - No Module named "_cffi_backend"将 PyNaCl 导入 Lambda 函数 - 没有名为“_cffi_backend”的模块
【发布时间】:2023-12-18 06:34:01
【问题描述】:

我能够将我的 PyNaCl 库作为一个层添加到 Lambda (Python 3.8) 中,但由于某种原因,当我尝试测试代码时出现错误

"errorMessage": "无法导入模块 'lambda_function': 没有名为 '_cffi_backend' 的模块", "errorType": "Runtime.ImportModuleError"

现在当我在本地使用 PyCharm 并将 PyNaCl 库安装到 venv 时,我没有执行错误。 Lambda 是否要求文件层次结构不同?我将库压缩为 /​​lib/python3.8/site-packages,其中包含的唯一库是 PyNaCl

【问题讨论】:

    标签: python amazon-web-services aws-lambda nacl-cryptography


    【解决方案1】:

    您的问题有两个可能的原因:

    1. lib 文件夹结构不准确。尝试 python/lib/python3.8/site-packages,然后再次压缩并上传

    2. 如果 (1) 不起作用,这可能是您使用的库是在与 Amazon Lambda 不兼容的平台上编译的。 Amazon Lambda 基于 Amazon Linux。一个简单的方法是使用AWS提供的docker文件创建一个docker镜像(注意你的python版本):

    https://docs.aws.amazon.com/lambda/latest/dg/python-image.html

    然后在容器内编译PyNaCl库,取出编译好的库文件重新上传。

    【讨论】:

      【解决方案2】:

      Lambda 要求层 .zip 存档目录结构以 python dir 开头。通常是这样的:

      mkdir python
      pip install pynacl -t python
      

      这应该创建正确的结构。压缩并作为图层上传。

      或者,您可以构建带有依赖项的 docker 映像并在 lambda 中使用它:https://docs.aws.amazon.com/lambda/latest/dg/images-create.html

      【讨论】: