Lamnda Python 3.8 GPG 解密找不到 gpg 二进制文件

问题描述

我正在尝试使用 lambda 函数来解密进入 S3 的文件,我下载文件没有问题,但是当我尝试解密它们时,找不到 gpg。我曾尝试同时使用 python-gnupggnupg,但都没有提到 gnupg 在操作系统上不可用。下面是我在 python 中对 GPG 进行实例化的代码 它适用于 python 3.7,但如果我升级到 3.8,Lambda 使用 AMazon Linux 2,它不附带 gpg。我如何让它在 Lambda 中与 python 3.8 一起工作?

gpg = gnupg.GPG(gnupghome='/tmp')

错误

OSError: Unable to run gpg (gnupg) - it may not be available

我发现的所有示例似乎都没有做任何额外的事情。我正在为我的函数打包 python-gnugp 包和所有其他 python 包

Lambda 中是否提供 gpg 二进制文件?我怎样才能做到这一点?

解决方法

您必须捆绑 gpg 二进制文件及其依赖项并在您的包中交付它们。在我的包中,我将它们捆绑到一个名为“gpg”的文件夹中,然后当我在我的 Lambda 函数中使用 gpg 时,我会这样做:

def lambda_handler(event,context):
    old = os.environ.get("LD_LIBRARY_PATH")
    if old:
        os.environ["LD_LIBRARY_PATH"] = "./gpg" + ":" + old
    else:
        os.environ["LD_LIBRARY_PATH"] = "./gpg"
    
    gpg = gnupg.GPG(gnupghome='/tmp',gpgbinary='./gpg/gpg2',verbose=False)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...