gpt4 book ai didi

python-3.x - 适用于 Python 和 AWS Lambda 的 Google Cloud Platform API 不兼容 : Cannot import name 'cygrpc'

转载 作者:行者123 更新时间:2023-12-03 17:44:20 24 4
gpt4 key购买 nike

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

Python 3.6 和 2.7 都不适合我。

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

最佳答案

TL;DR:您无法在 Mac 或您使用的任何 PC 上编译部署包。您必须使用特定的操作系统/“设置”来执行此操作,这与 AWS Lambda 用于运行您的代码的设置相同。为此,您必须使用 EC2。

我将在此处提供有关如何让 Google Cloud Vision 在 AWS Lambda for Python 2.7 上工作的答案。对于 AWS Lambda 上的其他 API 和其他编程语言,此答案可能是可扩展的。

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

I had the same issue " cannot import name 'cygrpc' " while running the lambda. Solved it with pip install google-cloud-vision in the AMI amzn-ami-hvm-2017.03.1.20170812-x86_64-gp2 instance and exported the lib/python3.6/site-packages to aws lambda Thank you @tseaver



这是部分正确的,除非我读错了,但无论如何它引导我走上了正确的道路。您将不得不使用 EC2。以下是我采取的步骤:
  • 通过转到 Amazon 上的 EC2 来设置 EC2 实例。如果您还没有,请快速阅读 AWS EC2。为 amzn-ami-hvm-2018.03.0.20180811-x86_64-gp2 或类似的东西(即最新的)设置一个。
  • 获取您的 EC2 .pem 文件。转到您的终端。 cd 进入 .pem 文件所在的文件夹。使用 SSH 进入您的实例

    ssh -i "your-file-name-here.pem"ec2-user@ec2-ip-address-here.compute-1.amazonaws.com
  • 使用 mkdir 在您的实例上创建以下文件夹:google-cloud-vision、protobuf、google-api-python-client、httplib2、uritemplate、google-auth-httplib2。
  • 在您的 EC2 实例上,cd 进入 google-cloud-vision。运行命令:

    点安装 google-cloud-vision -t 。

  • 备注 如果你得到“bash: pip: command not found”,那么输入“sudo easy_install pip” source .
  • 使用以下包重复步骤 4,同时 cd'ing 到相应的文件夹:protobuf、google-api-python-client、httplib2、uritemplate、google-auth-httplib2。
  • 复制计算机上的每个文件夹。您可以使用 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-目录/
  • 从 AWS 控制台停止您的 EC2 实例,这样您就不会被多收费用。
  • 对于您的部署包,您将需要一个包含所有模块和 Python 脚本的文件夹。要开始组合所有模块,请创建一个名为“模块”的空文件夹。将“google-cloud-vision”文件夹的所有内容复制并粘贴到“modules”文件夹中。现在只将“protobuf”(原文如此)主文件夹中标题为“protobuf”的文件夹放在“modules”文件夹的“Google”文件夹中。同样从“protobuf”主文件夹中,将 Protobuf .pth 文件和 -info 文件夹粘贴到 Google 文件夹中。
  • 对于 protobuf 之后的每个模块,将标题为模块名称的文件夹、.pth 文件和“-info”文件夹复制并粘贴到“modules”文件夹中。
  • 您现在已经正确组合了所有模块(几乎)。要完成组合,请从“模块”文件夹中删除这两个文件:googleapis_common_protos-1.5.3-nspkg.pth 和 google_cloud_vision-0.34.0-py3.6-nspkg.pth。将“模块”文件夹中的所有内容复制并粘贴到您的部署包文件夹中。此外,如果您使用 GCP,请同时粘贴 .json 文件以获取您的凭据。
  • 最后,把你的 Python 脚本放到这个文件夹中,压缩 内容 (不是文件夹),上传到 S3,然后将链接粘贴到您的 AWS Lambda 函数中,然后开始吧!

  • 如果此处的某些内容与描述的不符,请原谅我并给我发消息或随时编辑我的答案。希望这可以帮助。

    关于python-3.x - 适用于 Python 和 AWS Lambda 的 Google Cloud Platform API 不兼容 : Cannot import name 'cygrpc' ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52913257/

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