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

2023-11-26

我正在尝试将适用于 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 和其他编程语言。

所以我的解决方案之旅始于这个最初的帖子在 Github 上与其他有同样问题的人一起。有人发布的一种解决方案是

我在运行时遇到了同样的问题“无法导入名称'cygrpc'” 拉姆达。在 AMI 中使用 pip install google-cloud-vision 解决了这个问题 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“这里是您的文件名.pem”[电子邮件受保护]

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

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

    pip install google-cloud-vision -t 。

Note如果出现“bash: pip: command not found”,则输入“sudo easy_install pip”source.

  1. 对以下软件包重复步骤 4,同时 cd 到相应的文件夹:protobuf、google-api-python-client、httplib2、uritemplate、google-auth-httplib2。

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

    sudo scp -r -i 你的pem文件名.pem[电子邮件受保护]:~/google-cloud-vision ~/Documents/your-local-directory/

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

  4. 对于您的部署包,您将需要一个包含所有模块和 Python 脚本的文件夹。要开始组合所有模块,请创建一个名为“modules”的空文件夹。将“google-cloud-vision”文件夹的所有内容复制并粘贴到“modules”文件夹中。现在,仅将“protobuf”(原文如此)主文件夹中标题为“protobuf”的文件夹放入“modules”文件夹的“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。将“modules”文件夹中的所有内容复制并粘贴到部署包文件夹中。另外,如果您使用的是 GCP,也请粘贴您的凭据的 .json 文件。

  7. 最后,将你的Python脚本放入这个文件夹中,压缩contents(不是文件夹),上传到 S3,并将链接粘贴到您的 AWS Lambda 函数中,然后开始吧!

如果这里的某些内容与描述的不一样,请原谅我,或者给我发消息,或者随时编辑我的答案。希望这可以帮助。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

  • Python 3 中的相对导入

    我想从同一目录中的另一个文件导入函数 通常 以下其中一项有效 from mymodule import myfunction from mymodule import myfunction 但另一个给了我以下错误之一 ImportError
  • 自动缩放时如何更改新实例标签名称

    我在我的设备上创建了一个新闹钟AWS基于我也创建的指标的帐户 我用这个警报来自动缩放 当启动我正在使用的新实例时User Data字段来设置这个新实例 我面临的唯一问题是我无法修改标签 特别是标签Name 这个新实例 如果我不更改它 所有新
  • Selenium Python Firefox webdriver:无法修改配置文件

    我想在 Webdriver Firefox 实例上使用 新选项卡而不是窗口 选项 1 我创建了一个启用此选项的配置文件 但是当我使用该配置文件时 很多选项都可以 但不是这个 2 加载配置文件后 我尝试更改代码中的选项 但它不起作用 我的代码
  • 查找两个复杂字典之间的集合差异

    我有两个结构如下的字典 a dict1 a 1 2 3 4 b 1 2 5 6 b dict2 a 1 2 5 6 b 1 2 7 8 我需要找到字典中每个键之间的设置差异 即 dict1 a dict2 a 应该返回 3 4 任何想法都值
  • 您可以克隆 AWS lambda 吗?

    针对不同环境的克隆 分期 QA PROD DEV 等 有没有一种快速简单的方法来克隆我的 lambda 给出不同的名称并从那里调整配置 您需要在新帐户中重新创建 Lambda 函数 转到 lambda 函数 单击 操作 并导出您的函数 下载
  • 错误“未初始化常量 AWS (NameError)”

    它说 AWS 未初始化 我正在使用 aws sdk core gem 我尝试使用 aws sdk gem 代替 问题仍然存在 这是initializers aws rb 文件 AWS config access key id gt ENV
  • 无法使用 beautifulsoup 模块 python 从 HTML 检索温度值

    我正在使用 BeautifulSoup4 来解析此 HTML 查看源代码 https weather com en IN weather today l 17 39 78 49 https weather com en IN weather
  • 如何找到 api gateway stage 的 arn?

    我正在尝试使用 awscli 将标签添加到我的 api 网关阶段https docs aws amazon com cli latest reference apigateway tag resource html https docs a
  • 使用 AWS Lambda 函数订阅 Amazon SNS 主题?

    我们可以订阅一个亚马逊社交网络服务主题使用AWS Lambda功能 是的 在 的帮助下sns subscribe https docs aws amazon com AWSJavaScriptSDK latest AWS SNS html
  • 如何将 Cloud Firestore 数据库集合下载到 JSON 或 CSV 文件中?

    好的 事情是这样的 我已经在 Flutter Firebase 项目上工作了一段时间 现在我的客户想知道是否有机会从 Cloud Firestore 数据库的某个集合中获取 CSV o JSON 文件 以便稍后使用由Power Bi或其他一
  • 为什么从浏览器上传到 S3 时出现 403 错误?

    因此 我尝试查看此处之前的答案 但似乎没有任何效果 我正在使用 Dropzone 它似乎发出 OPTIONS 请求来获取所有允许的 CORS 相关信息 但它似乎没有正确返回 因此 通过查看 Chrome 开发工具 我有以下请求标头 Host
  • AWS SES模板html部分是多行

    我正在使用 AWS SES 按照文档发送电子邮件https docs aws amazon com ses latest DeveloperGuide send personalized email api html https docs
  • 如何在Python中获取声音级别?

    对于我正在进行的项目 我需要获取麦克风的实时分贝级别 我见过阴谋家 Print out realtime audio volume as ascii bars import sounddevice as sd import numpy as
  • 如何只获取父类对象的属性

    我有两节课 class Parent object def init self id name self id id self name name self parent vars id name make a copy def print
  • S3.getSignedUrl 接受多种内容类型

    我正在使用react s3 uploader节点包 它接受一个signingUrl用于获取用于将对象存储到 S3 中的signedUrl 目前 我已经配置了一个 lambda 函数 带有 API 网关端点 来生成此signedUrl 经过一
  • AWS CDK 授予堆栈外部资源的权限

    我对 AWS CDK 相当陌生 并且没有太多使用 AWS 的经验 在我正在编写的 CDK 堆栈中 我必须向使用其他 CDK 模板构建且已位于 aws 中的资源授予权限 假设我的堆栈 A 包含一个 lambda 该 lambda 将从另一个服
  • AWS Fargate 任务错误 - ResourceInitializationError:无法下载环境文件:无法写入临时文件:AccessDenied

    我正在尝试使用容器定义下的环境文件配置 S3 ARN 从 Fargate ECS 任务访问存储在 S3 存储桶中的 env 文件 但 ECS 任务因停止原因而失败 资源初始化错误 无法下载 env 文件 文件下载命令 非空错误流 无法下载文
  • 表达式中的 Python 'in' 关键字与 for 循环中的比较 [重复]

    这个问题在这里已经有答案了 我明白什么是in运算符在此代码中执行的操作 some list 1 2 3 4 5 print 2 in some list 我也明白i将采用此代码中列表的每个值 for i in 1 2 3 4 5 print
  • 为美国东部以外地区的 Cloudwatch 警报发送短信?

    AWS 似乎没有为美国东部以外的 SNS 主题订阅者提供 SMS 作为协议 我想连接我的 CloudWatch 警报并在发生故障时接收短信 但无法将其发送到 SMS YES 经过一番挖掘后 我能够让它发挥作用 它比仅仅选择一个主题或输入闹钟
  • VSCode:调试配置中的 Python 路径无效

    对 Python 和 VSCode 以及 stackoverflow 非常陌生 直到最近 我已经使用了大约 3 个月 一切都很好 当尝试在调试器中运行任何基本的 Python 程序时 弹出窗口The Python path in your

随机推荐