适用于Python和AWS Lambda的Google Cloud Platform API不兼容:无法导入名称“ cygrpc”

Jos*_*lff 3 amazon-web-services python-3.x google-cloud-platform aws-lambda

我正在尝试将适用于Python的Google Cloud Platform(特别是Vision API)与AWS Lambda结合使用。因此,我必须为我的依赖项创建一个部署程序包。但是,当我尝试创建此部署程序包时,无论使用哪个Python版本(3.6或2.7),都会遇到一些编译错误。考虑到版本3.6,出现问题“无法导入名称'cygrpc'”。对于2.7,.path文件出现一些未知错误。我下面的AWS LAMBDA部署包的说明这里。他们推荐了两个选项,并且都不起作用/导致相同的问题。GCP是否由于某种原因与AWS Lambda不兼容?这是怎么回事?

Python 3.6和2.7都不适合我。

注意:我将在此处发布此问题以自己回答,因为我花了相当长的时间才能找到解决方案,并且我想分享我的解决方案。

Jos*_*lff 10

TL; DR:您无法在Mac或任何使用的PC上编译部署程序包。您必须使用特定的OS /“设置”来完成它,AWS Lambda用来运行您的代码。为此,您必须使用EC2。

我将在此处提供有关如何使Google Cloud Vision在AWS Lambda for Python 2.7上运行的答案。该答案可能可扩展到AWS Lambda上的其他其他API和其他编程语言。

因此,我寻求解决方案的旅程始于在Github上与其他有相同问题的其他人一起发布初始帖子。有人发布的一种解决方案是

运行lambda时,我遇到了同样的问题“无法导入名称'cygrpc'”。使用pip install google-cloud-vision在AMI amzn-ami-hvm-2017.03.1.20170812-x86_64-gp2实例中解决了该问题,并将lib / python3.6 / site-packages导出到了AWS Lambda谢谢@tseaver

这是部分正确的,除非我读错了,但无论它如何引导我走上正确的道路。您将必须使用EC2。这是我采取的步骤:

  1. 通过转到Amazon上的EC2设置EC2实例。如果还没有,请快速阅读有关AWS EC2的信息。为amzn-ami-hvm-2018.03.0.20180811-x86_64-gp2或类似内容设置一个(即最新的)。
  2. 获取您的EC2 .pem文件。转到您的终端。cd到您的.pem文件所在的文件夹中。SSH使用您的实例

    ssh -i“您的文件名-here.pem” ec2-user@ec2-ip-address-here.compute-1.amazonaws.com

  3. 使用mkdir在实例上创建以下文件夹:google-cloud-vision,protobuf,google-api-python-client,httplib2,uritemplate,google-auth-httplib2。

  4. 在您的EC2实例上,CD进入google-cloud-vision。运行命令:

    pip安装google-cloud-vision -t。

注:如果收到“ bash:pip:找不到命令”,请输入“ sudo easy_install pip” 来源

  1. 使用以下软件包重复步骤4,同时将CD插入相应的文件夹:protobuf,google-api-python-client,httplib2,uritemplate,google-auth-httplib2。

  2. 复制计算机上的每个文件夹。您可以使用scp命令执行此操作。同样,在您的终端中,而不是您的EC2实例以及您用来访问EC2实例的终端窗口中,运行命令(以下是“ google-cloud-vision”文件夹的示例,但请对每个文件夹重复此操作):

    须藤scp -r -i your-pem-file-name.pem ec2-user@ec2-ip-address-here.compute-1.amazonaws.com:〜/ google-cloud-vision〜/ Documents /您的本地-目录/

  3. 从AWS控制台停止EC2实例,以免多收费用。

  4. 对于您的部署软件包,您将需要一个包含所有模块和Python脚本的文件夹。要开始组合所有模块,请创建一个名为“模块”的空文件夹。复制“ google-cloud-vision”文件夹的所有内容并将其粘贴到“ modules”文件夹中。现在,仅将“ protobuf”(原文如此)主文件夹中名为“ protobuf”的文件夹放在“模块”文件夹的“ Google”文件夹中。同样从“ protobuf”主文件夹中,将Protobuf .pth文件和-info文件夹粘贴到Google文件夹中。

  5. 对于protobuf之后的每个模块,将标题为模块名称,.pth文件和“ -info”文件夹的文件夹复制并粘贴到“ modules”文件夹中。

  6. 现在,您已经(几乎)正确地组合了所有模块。要完成合并,请从“模块”文件夹中删除以下两个文件:googleapis_common_protos-1.5.3-nspkg.pth和google_cloud_vision-0.34.0-py3.6-nspkg.pth。复制“模块”文件夹中的所有内容并将其粘贴到部署包文件夹中。另外,如果您使用的是GCP,也请粘贴.json文件中的凭据。

  7. 最后,将您的Python脚本放在此文件夹中,压缩内容(而不是文件夹),上传到S3,然后将链接粘贴到您的AWS Lambda函数中,然后开始!

如果此处的内容无法按照说明操作,请原谅我,或者给我发消息或随时编辑我的答案。希望这可以帮助。