我一直在纠结如何在子目录中正确设置python Lambda并使导入正常工作。例如,如果你不像AWS推荐的那样把你的python放在根文件夹中,而是把它放在一个src文件夹中,其中lambda_handler.py是主处理程序,然后是packages/folders,所以你可能有src/API,举个例子,我正在使用新的SAM accelerate,他们承认了一个bug,它没有忽略.aws-sam文件夹,所以它会无限地循环到根目录下的项目,所以他们推荐了一个子文件夹,但这显然让Python的事情变得非常复杂。
我想我已经正确地弄明白了如何正确地使用init.py读取我自己的包和子文件夹中的模块,但是我无法安装requirements.txt,所以它们不会出现在本地构建或云构建中。我发现了相当多的StackOverflows,看起来就是这个主题,但它们似乎都不适合我,也没有给予一个我可以遵循的例子。以下是我的结构:
第一个月
我导入了一个pymysql作为例子,我的requirements.txt依赖项从来没有安装过,所以pymysql从来没有被找到过。我觉得事情不应该这么困难。有人能帮忙吗?
更新:我可能已经找到了这个问题,这篇文章给了我一个https://github.com/aws/serverless-application-model/issues/1927的线索。看起来sam invoke local
在定制模板方面也有同样的问题--我正在使用的东西--这不是很直观,尽管他们声称这是按预期工作的。
更新2:确实帮助了我的进步,但它仍然没有按预期工作。
1条答案
按热度按时间ymdaylpp1#
我忘了回到这一点,所以我想我会在这里张贴这一点,以帮助其他人可能正在努力,因为Python是真的挑剔。
以下是Lambda中的功能项目结构:
请注意,base.mo文件在构建版本中与基本.po文件生成在同一位置,并且requirements-dev.txt具有仅限开发人员使用的库,比如pep 8,它只在我的本地conda环境中运行[我使用miniconda为每个项目设置虚拟环境]。例如Python文件,以从对存储库的调用中检索数据。