代码之家  ›  专栏  ›  技术社区  ›  Joshua Wolff

用于python和aws lambda不兼容的Google云平台API:无法导入名称“cygrpc”

  •  1
  • Joshua Wolff  · 技术社区  · 6 年前

    我正在尝试使用Google云平台(特别是VisionAPI)来实现带有aws lambda的Python。因此,我必须为依赖项创建一个部署包。但是,当我尝试创建这个部署包时,无论Python(3.6或2.7)的版本如何,我都会遇到几个编译错误。考虑到3.6版,我得到的问题是“无法导入名称‘cygrpc’”。对于2.7,我在.path文件中得到了一些未知错误。我正在遵循AWS lambda部署包说明 here . 他们推荐两个选项,但这两个选项都不能产生相同的问题。出于某种原因,GCP是否与AWS lambda不兼容?怎么回事?

    python 3.6或2.7都可以为我工作。

    注意:我在这里发布这个问题是为了自己回答,因为我花了很长时间才找到解决方案,我想分享我的解决方案。

    1 回复  |  直到 6 年前
        1
  •  3
  •   Joshua Wolff    6 年前

    我将在这里提供一个关于如何让GoogleCloudVision在针对Python2.7的AWS lambda上工作的答案。这个答案对于其他API和其他AWS lambda上的编程语言可能是可扩展的。

    所以我的解决之旅始于 this initial posting 在Github上与其他有相同问题的人讨论。有人发布的一个解决方案是

    我在运行时遇到同样的问题“cannot import name'cygrpc'” 兰巴达。在AMI中用pip安装Google Cloud Vision解决了这个问题 amzn-ami-hvm-2017.03.1.20170812-x86_-gp2实例并导出 lib/python3.6/site-packages到aws lambda谢谢@tseaver

    这是部分正确的,除非我读错了,但不管它引导我走上正确的道路。您必须使用EC2。以下是我采取的步骤:

    1. 通过转到Amazon上的EC2来设置EC2实例。如果您还没有,请快速阅读有关AWS EC2的信息。为amzn-ami-hvm-2018.03.0.20180811-x86_-gp2或其他线路设置一个(即最新的线路)。
    2. 获取ec2.pem文件。去你的终点站。将CD放入.pem文件所在的文件夹中。在实例中使用ssh

      ssh-i“your file name 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。

    5. 对以下包重复步骤4,同时将其放入相应的文件夹:protobuf、google api python client、httplib2、uritemplate、google-auth-httplib2。

    6. 复制计算机上的每个文件夹。您可以使用scp命令执行此操作。同样,在您的终端中,不是您的EC2实例,也不是您用来访问EC2实例的终端窗口中,运行该命令(下面是您的“Google Cloud Vision”文件夹的示例,但对每个文件夹重复此操作):

      sudo scp-r-i your-pem-file-name.pem ec2 user@ec2 ip address here.compute-1.amazonaws.com:~/google cloud vision~/documents/your local directory/

    7. 从AWS控制台停止您的EC2实例,这样您就不会被过度收费。

    8. 对于部署包,需要一个包含所有模块和Python脚本的文件夹。要开始组合所有模块,请创建一个名为“模块”的空文件夹。将“Google Cloud Vision”文件夹的所有内容复制并粘贴到“模块”文件夹中。现在只将“protobuf”(sic)主文件夹中名为“protobuf”的文件夹放在“modules”文件夹的“google”文件夹中。另外,从“protobuf”主文件夹中,将protobuf.pth文件和-info文件夹粘贴到google文件夹中。

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

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

    11. 最后,将您的python脚本放在这个文件夹中,压缩 内容 (不是文件夹),上传到S3,并将链接粘贴到您的AWS lambda函数中,然后开始!

    如果这里的一些东西不能像描述的那样工作,请原谅我,或者给我留言,或者随意编辑我的答案。希望这有帮助。