从 aws-lambda 导入 pysftp 时如何修复导入错误“没有名为 '_cffi_backend' 的模块”

Posted

技术标签:

【中文标题】从 aws-lambda 导入 pysftp 时如何修复导入错误“没有名为 \'_cffi_backend\' 的模块”【英文标题】:How to fix import error "No module named '_cffi_backend' " when import pysftp from aws-lambda从 aws-lambda 导入 pysftp 时如何修复导入错误“没有名为 '_cffi_backend' 的模块” 【发布时间】:2019-12-17 15:19:44 【问题描述】:

我正在编写一个简单的脚本来从aws-lambda 连接我的 sftp 服务器,并且我得到了

Unable to import module 'lambda_function': No module named '_cffi_backend'

当我从aws-lambda 导入pysftp 时。我正在使用 python3.6 并且只导入 pysftp 仅此而已

我已经尝试安装 cffi

python3 pip install cffi

【问题讨论】:

你最后解决了吗? 【参考方案1】:

您需要在 Lambda 包中包含第三方模块。转到 pip 为您的模块保存数据的目录,找到您正在使用的模块,复制它们的目录并包含在 Lambda zip 文件中。然后在 Lambda 上再次部署并运行它。应该可以。

【讨论】:

【参考方案2】:

您需要将依赖项上传到 lambda 函数。您需要做的就是创建一个文件夹,我们将其称为“测试”并将您的 python 代码放入其中。然后,将所需的 python 包安装到同一文件夹中。您可以使用以下命令来完成:

pip install --target <path directory> <package name>

这会将所需的包安装到指定的目录中。在您的情况下,命令将是

pip install --target C:\test requests

【讨论】:

这不是在回答 OP 的问题,并且您假设是 Windows 环境。【参考方案3】:

我在 python 3.7(cffi==1.11.2,cryptography==2.1.2,paramiko==2.3.1)上遇到了同样的问题,并将其降级解决到 python 3.6 .

在这个issue 主题中找到了解决方案。

【讨论】:

这解决了我的问题。当我的 cffi 编译为 3.6 时,我使用的是 Python 3.8。您可以通过其名称(例如_cffi_backend.cpython-36m-x86_64-linux-gnu.so)来判断您的 cffi 文件是为哪个 Python 版本编译的。您可以在 lambda 控制台上降级到 Python 3.6(例如 https://.console.aws.amazon.com/lambda/home?region=#/functions)。 感谢您的评论,我花了半天时间,尝试了不同版本的 lamdalayer。【参考方案4】:

我通过在 AWS 控制台中为现有层创建新版本来解决此问题。添加新版本后,我编辑了当前图层的版本。这解决了我的问题。

【讨论】:

以上是关于从 aws-lambda 导入 pysftp 时如何修复导入错误“没有名为 '_cffi_backend' 的模块”的主要内容,如果未能解决你的问题,请参考以下文章

如何从 pysftp 获取上次修改时间

从 DataAdapter 拉数据时如何处理 DBNull

如何使用 pysftp 从 SFTP 下载文件?

使用 git 子模块时如何处理绝对导入

aws-lambda 找不到模块

构建同构 React 应用程序时如何处理 SASS 的导入?