从 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://我通过在 AWS 控制台中为现有层创建新版本来解决此问题。添加新版本后,我编辑了当前图层的版本。这解决了我的问题。
【讨论】:
以上是关于从 aws-lambda 导入 pysftp 时如何修复导入错误“没有名为 '_cffi_backend' 的模块”的主要内容,如果未能解决你的问题,请参考以下文章