我想在py魅力中将工作的python项目部署到aws lambda。该项目使用谷歌广告库从谷歌广告中获取一些报告数据。
我试图通过导入完整的项目作为一个zip文件来部署lambda,方法是压缩项目中的所有文件夹/文件,而不是项目文件夹本身。但我得到了以下错误:
{
"errorMessage": "Unable to import module 'main': cannot import name 'cygrpc' from 'grpc._cython' (/var/task/grpc/_cython/__init__.py)",
"errorType": "Runtime.ImportModuleError",
"stackTrace": []
}
假设google-ads库工作正常,而且grpc有问题(顺便说一句,google-ads本身包含grpcio和一些东西),我试图为grpcio、cython、cygrpc创建一个层,但错误依然存在。
我在aws中创建项目/层,它们可以工作。我不知道我在这里做错了什么。
任何帮助都是非常感谢的!
版本: google-ads-14.1.0,python-3.9,grpcio-1.43.0
发布于 2022-01-28 11:50:24
经过大量的变通后回答我自己的问题。我把它变成通用的所以任何人都可以使用它。
我相信只要部署包的文件结构、代码和体系结构都正常,就可以修复任何类型的ImportModuleError,只有这样,您才能成功地部署和运行代码。要修复您的结构和体系结构,请执行以下步骤:
从微软商店(Windows 10)安装“ubuntu18.04LTS”。
2-打开CMD并运行以下命令:
ubuntu1804
cd /mnt/c
,您可以选择任何驱动器。我选择了C.mkdir my-lambda-folder
创建项目folder.cd my-lambda-folder
,进入项目folder.touch lambda_function.py
创建文件,名为lambda_function.pypip install --target ./package google-ads
将在文件夹'package‘中安装google模块。文件夹' package‘将自动创建,如果不是found.cd package
zip -r ../my-deployment-package.zip .
,这将创建部署包,并在项目文件夹根目录处安装库。例如,my-lambda-folder.cd ..
返回到项目folder.zip -g my-deployment-package.zip lambda_function.py
的根目录,将lambda函数添加到您刚刚创建的部署包中,在我使用google的情况下,添加my-deployment-package.zip.zip -g my-deployment-package.zip google-ads-yaml
(我已经在我的项目文件夹中粘贴了这个文件)。3-将my-deployment-package.zip上传到AWS控制台中的lambda函数,您就可以继续了。
发布于 2022-05-02 07:53:03
对我来说,它的工作只是通过下载的软件包与pip在码头和包装,并上传到AWS。
https://stackoverflow.com/questions/70830600
复制相似问题