Python AWS Lambda未导入异步IO

Python AWS Lambda未导入异步IO,python,amazon-web-services,import,aws-lambda,Python,Amazon Web Services,Import,Aws Lambda,所以我正在制作一个应用程序来调用RedditAPI,而Lambda似乎不喜欢我导入asyncio的方式。我使用“pip install asyncio-t”在包文件夹中安装了asyncio,然后用我的项目文件压缩该文件夹。我正在项目文件中导入asyncio(导入asyncio)。然而,每次我尝试在Alexa开发者控制台中测试我的Alexa应用程序时,在我去掉import语句之前,该应用程序不会运行 以下是我尝试测试时得到的信息: {“errorMessage”:“模块'reddit_alexa_

所以我正在制作一个应用程序来调用RedditAPI,而Lambda似乎不喜欢我导入asyncio的方式。我使用“pip install asyncio-t”在包文件夹中安装了asyncio,然后用我的项目文件压缩该文件夹。我正在项目文件中导入asyncio(导入asyncio)。然而,每次我尝试在Alexa开发者控制台中测试我的Alexa应用程序时,在我去掉import语句之前,该应用程序不会运行

以下是我尝试测试时得到的信息:

{“errorMessage”:“模块'reddit_alexa_py'中的语法错误”:无效 语法(base_events.py,第296行)“errorType”: “Runtime.UserCodeSyntaxError”、“stackTrace”:[ “File\”/var/task/asyncio/base_events.py\“第296行\n future=tasks.async(future,loop=self)\n”]

下面是日志输出:

启动请求ID:ee952162-1d06-4c04-9a0d-cfd4f0fce80f版本:$LATEST [错误]Runtime.UserCodeSyntaxError:模块中的语法错误 “reddit_alexa_py”:无效语法(base_events.py,第296行)回溯 (最后一次调用):文件“/var/task/asyncio/base_events.py” 第296行 future=tasks.async(future,loop=self)结束请求ID:ee952162-1d06-4c04-9a0d-cfd4f0fce80f报告请求ID: ee952162-1d06-4c04-9a0d-cfd4f0fce80f持续时间:19.71毫秒计费 持续时间:100毫秒内存大小:128 MB最大使用内存:57 MB

这也发生在我尝试导入的其他东西上。我想我需要导入这些软件包才能完成这个项目,所以任何帮助都将不胜感激。谢谢


编辑:这里有一个指向Python文件的链接

我使用了类似的过程。在压缩所有内容之前,我必须将导入的模块复制到工作目录的子目录中。在将zip文件加载到Lambda函数中之后,我能够通过查看Lambda控制台中的函数来验证要导入的代码是否已加载


对我来说,关键是,在我的本地计算机上,我必须找到psycopg2目录,并将整个目录复制到我正在编写postgresql_test.py的工作目录中,然后再压缩我的工作目录。

我不确定asyncio,但对于python软件包,通常需要确保软件包是为AmazonLinux1(用于python 3.7运行时)和AmazonLinux2(用于python 3.8运行时)构建的。在幕后,Lambda使用运行amazonlinux的容器,您需要确保上传的包与该操作系统兼容。纯python包是可以的,但是任何带有编译内容的东西都需要是特定于操作系统的

此外,您还需要确保将整个包与代码一起压缩

一种更简单的方法是使用无服务器框架及其无服务器python需求插件。这将有助于实现自动化,因此您不必一直手动修补这些东西


还有checkout,它有一大堆python包可以快速使用——不幸的是没有asyncio。

我使用的是python 3.8,我的程序在本地运行得很好,但是当打包并将其添加到lambda函数时,我得到了完全相同的错误。事实证明,asyncio是python的一部分,但是如果您不知道这一点,并且像我一样进行pip安装,您将获得第二个副本。我在一个图层中使用了第二个副本,并不断得到错误。在尝试了许多不同的变体/版本等之后,我意识到python附带的版本与安装的pip完全不同。 解决方案很简单,请确保不要尝试pip asyncio,只需让lambda从您正在使用的python版本中选择它,并确保您的搜索路径中没有第二个(不同)版本

我也有同样的问题。 上传打包到Lambda层将上传到/opt/

当打包压缩到python文件夹中时,它将上载到/opt/python文件夹,并且从lambda中设置的层导入的模块的默认路径是/opt/python

但是,异步IO模块不应通过将其放入python文件夹并根据aws指南进行压缩来上载到该层。 我不知道确切的原因

为避免此错误,请将pip模块安装在不同的文件夹(而不是python文件夹)中,并对其进行压缩。(示例:./python模块)

在上传(pythonmodules.zip)到layer并在lambda中按如下方式编写之后,不会出现任何问题

import sys
sys.path.append("/opt/python-modules")
import asyncio

还不够,但谢谢您的阅读。

您能发布您的代码吗?另外,我认为Python不会从zip文件导入模块。。。为什么需要压缩模块?是否可以在Alexa开发者控制台中运行
pip install asyncio
?@EdWard我在线观看了一个关于如何向AWS Lambda函数的代码中添加部署包的教程。以下是我使用的视频的链接:。我还在描述中添加了一个指向Python文件的链接。每次我尝试导入asyncio时,Alexa测试都会自动中断。如果你不介意我问的话,你在哪里找到了psycopg2文件夹?我不记得很清楚,但在我的项目说明中我指出了,所以我想我遵循了该页面上的
git clone
cp
说明。