首页 > 解决方案 > 使用 Lambda 层(Python)时无法访问 Paramiko 的属性/子模块

问题描述

我对 python 还很陌生,所以如果我使用了错误的术语,请原谅我。

我有一个安装了 Paramiko 的 Lambda 层。我通过创建一个目录 python/lib/python3.8/site-packages 并使用 pip(或通常是 python3.8 -m pip)将 Paramiko 安装到 site-packages 目录中来做到这一点。(我也安装到 python/lib/python3.8/site-packages/paramiko,但问题仍在继续。)

每当我尝试使用以下代码时:

import paramiko

client=paramiko.client.SSHClient()

我收到以下错误:

{
  "errorMessage": "module 'paramiko' has no attribute 'client'",
  "errorType": "AttributeError",
  "stackTrace": [
    "  File \"/var/lang/lib/python3.8/imp.py\", line 234, in load_module\n    return load_source(name, filename, file)\n",
    "  File \"/var/lang/lib/python3.8/imp.py\", line 171, in load_source\n    module = _load(spec)\n",
    "  File \"<frozen importlib._bootstrap>\", line 702, in _load\n",
    "  File \"<frozen importlib._bootstrap>\", line 671, in _load_unlocked\n",
    "  File \"<frozen importlib._bootstrap_external>\", line 783, in exec_module\n",
    "  File \"<frozen importlib._bootstrap>\", line 219, in _call_with_frames_removed\n",
    "  File \"/var/task/lambda_function.py\", line 9, in <module>\n    test=paramiko.client.SSHClient()\n"
  ]
}

我尝试了很多方法来修复,例如在 Amazon Linux 2 机器上而不是我的 Macbook 上执行此操作,将 pip 版本更改为 3.8,更改目录结构/代码的细节。(例如 paramiko.SSHClient 代替)。

我在这里读到的一个建议是:无法使用 python 库:'paramiko' with AWS Lambda

或者您包含在压缩文件中的依赖项之一被编译到您机器的架构中,这通常与托管 lambda 函数的架构不同。在这种情况下,您应该找出托管 lambda 函数的 Linux 版本,并获得可供 AWS lambda 使用的预编译版本。

如果以上是问题,我该怎么做?

标签: pythonpython-3.xamazon-web-servicesaws-lambdaparamiko

解决方案


推荐阅读