gpt4 book ai didi

python - 在 AWS Lambda 上迁移到 arm64 显示错误 : Unable to import module 'encryptor-lambda'

转载 作者:行者123 更新时间:2023-12-05 04:37:55 25 4
gpt4 key购买 nike

我有一个 lambda 函数在 Python 3.7 上运行,之前的架构是 x86_64。现在我想将它迁移到 arm64 以使用 Graviton 处理器并升级到 Python 3.9。

虽然我成功创建了具有所需依赖项的 Python 3.9 虚拟环境层,即 aws-encryption-sdk,但当我将 lambda 函数的架构更改为 arm64 并将运行时更改为Python 3.9,在我测试我的代码后显示以下错误:

Unable to import module 'encryptor-lambda': /opt/python/cryptography/hazmat/bindings/_rust.abi3.so: cannot open shared object file: No such file or directory",

我去检查了我的虚拟环境层,并且非常确定文件 /opt/python/cryptography/hazmat/bindings/_rust.abi3.so 存在于那里。

然后我尝试将我的运行时保持在 Python 3.9 并将体系结构切换回 x86,它起作用了!只有当我尝试将其更改为 arm64 时,它才会出现上述错误。

我在网上查找但似乎没有解决方案或为什么会这样。需要依赖的 lambda 函数不能迁移吗?还是我遗漏了什么?

最佳答案

类似 aws-encryption-sdk-python 的库有时包含不是纯 Python 的代码/依赖项,需要编译。当代码需要“编译”时,通常会针对目标架构(如 ARM 或 x86)进行编译,以便正常运行。


您不能在不同的架构上运行为一种架构编译的代码。所以我怀疑这是你出错的原因。


查看错误信息我怀疑是cryptography library导致这个问题。

该库使用 Rust。如果检查您的错误,您将看到 Rust 绑定(bind)的共享库是导致错误的原因 (_rust.abi3.so)。根据库的文档,支持 ARM 架构。

因此,我怀疑您打包 Lambda 部署程序包的方式及其依赖项是问题所在。您可能在具有 x86 体系结构的计算机上执行此操作。像 pip 这样的包管理器通常会检测它们运行的​​操作系统和架构,并下载这些操作系统和架构的依赖项。

所以我猜你有两个选择:

  1. 在 ARM 机器上运行构建/部署
  2. 设法使用 crossenv 等工具“交叉编译”

这两个选项都不是很好。

不幸的是,这是 Python Lambda 的开发/部署变得非常麻烦的领域之一。每次依赖项使用非 Python 扩展(如 C 扩展)时,打包/部署都会成为问题。

也许其他人可以推荐一个很棒的工具。

关于python - 在 AWS Lambda 上迁移到 arm64 显示错误 : Unable to import module 'encryptor-lambda' ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70649979/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com