我正在尝试将适用于 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。以下是我采取的步骤:
- 通过转至 Amazon 上的 EC2 设置 EC2 实例。如果您还没有阅读过有关 AWS EC2 的内容,请快速阅读一下。为 amzn-ami-hvm-2018.03.0.20180811-x86_64-gp2 或类似的东西设置一个(即最新的)。
-
获取您的 EC2 .pem 文件。前往您的终端。 cd 进入 .pem 文件所在的文件夹。使用 ssh 进入您的实例
ssh -i“这里是您的文件名.pem”[电子邮件受保护]
使用 mkdir 在您的实例上创建以下文件夹:google-cloud-vision、protobuf、google-api-python-client、httplib2、uritemplate、google-auth-httplib2。
-
在您的 EC2 实例上,cd 进入 google-cloud-vision。运行命令:
pip install google-cloud-vision -t 。
Note如果出现“bash: pip: command not found”,则输入“sudo easy_install pip”source.
对以下软件包重复步骤 4,同时 cd 到相应的文件夹:protobuf、google-api-python-client、httplib2、uritemplate、google-auth-httplib2。
-
复制计算机上的每个文件夹。您可以使用 scp 命令来执行此操作。同样,在您的终端中,而不是您的 EC2 实例,也不是您用于访问 EC2 实例的终端窗口中,运行命令(下面是“google-cloud-vision”文件夹的示例,但对每个文件夹重复此操作):
sudo scp -r -i 你的pem文件名.pem[电子邮件受保护]:~/google-cloud-vision ~/Documents/your-local-directory/
从 AWS 控制台停止您的 EC2 实例,以免收取过多费用。
对于您的部署包,您将需要一个包含所有模块和 Python 脚本的文件夹。要开始组合所有模块,请创建一个名为“modules”的空文件夹。将“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。将“modules”文件夹中的所有内容复制并粘贴到部署包文件夹中。另外,如果您使用的是 GCP,也请粘贴您的凭据的 .json 文件。
最后,将你的Python脚本放入这个文件夹中,压缩contents(不是文件夹),上传到 S3,并将链接粘贴到您的 AWS Lambda 函数中,然后开始吧!
如果这里的某些内容与描述的不一样,请原谅我,或者给我发消息,或者随时编辑我的答案。希望这可以帮助。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)