Python 2.7 AWS python lambda函数:没有名为请求的模块

Python 2.7 AWS python lambda函数:没有名为请求的模块,python-2.7,amazon-web-services,aws-lambda,Python 2.7,Amazon Web Services,Aws Lambda,我是AWS的新手,有一些问题。这是我的密码: from __future__ import print_function from urllib2 import Request, urlopen, URLError import requests import boto3 import json def lambda_handler(event, context): url = "https://globalcurrencies.xignite.com/xGlobalCurrencie

我是AWS的新手,有一些问题。这是我的密码:

from __future__ import print_function
from urllib2 import Request, urlopen, URLError
import requests
import boto3
import json

def lambda_handler(event, context):
    url = "https://globalcurrencies.xignite.com/xGlobalCurrencies.json/GetHistoricalRatesRange?Symbol=BTCUSD&PriceType=Mid&StartDate=01/01/2017&EndDate=10/27/2017&PeriodType=Daily&FixingTime=22:00&_token=some_token_xyz"
    response = requests.get(url).json()
    # print json.dumps(response, indent=4) # gives a syntax error
    return response
文件名为lambda_function.py;我已经检查了stackoverflow上的类似问题,有些人提到我必须更改文件名。但这没用。python方法的名称如下:
以下是我得到的错误:
START RequestId:cf24e9be-bbef-11e7-97b4-d9b586307f3e版本:$LATEST
无法导入模块“lambda_函数”:没有模块命名请求

当尝试打印时,它会给我一个语法错误。很抱歉格式化了。有什么建议吗?

您必须用python代码这样命名lambda:

def lambda_function(event, context):
在lambda控制台处理程序中:

main.lambda_function

对于您的请求错误,在上载到lambda之前,必须将该模块的文件夹放在.zip上。

这是因为它在lambda中运行时缺少请求库-它可能是全局安装在本地计算机上的。如果运行:
pip安装请求-t.

在与源代码相同的目录中,它将在该目录中安装请求包,然后您可以将其与lambda_function.py一起上载到lambda。您可能需要对boto3和json执行相同的操作:
pip安装bot3-t.


pip install json-t。

'requests'模块不在您尝试安装的'zip'文件中。您必须通过“pip install module_name(例如requests)-t”将所有模块放入zip文件。

requests在AWS lambda中不是标准库

所以有两种方法可以解决这个问题:

1-将其从Botocore库堆栈导入为:(在给出答案后不推荐使用此选项)

在lambda中有一个要导入的所有可用库的列表


2-要使用的带有virtualenv的部署包。

。您可以下载一个python模块,例如pip install requests-t。然后简单地将所有模块文件夹放入一个名为python的文件夹中,然后将其压缩并上传到aws控制台的lambda layers部分。将它添加到lambda函数中,它就会工作。dir结构非常重要,因此对于请求,当您解压缩文件夹时,它应该是RequestLayer/python/requests/“requests和属于该包的所有其他文件夹”

对于使用Python的未来读者:如果您直接在Cloud9中创建Lambda应用程序,您会注意到您的应用程序有一个虚拟环境。要安装请求(或与此相关的任何其他软件包),请执行以下操作:

  • 右键单击应用程序的文件夹
  • 选择“在此处打开终端”
  • 在终端类型
    源venv/bin/activate
    中,激活您的虚拟环境
  • 键入
    pip3安装请求
    以安装请求

  • 就是这样。现在,您可以按照正常方式将请求与
    导入请求一起使用。

    如果您希望包含库,例如
    请求
    ,您可以使用lambda的层

    1。创建邮政编码:

    这是一个包含lambda函数要使用的所有库的zip文件。 首先,创建
    python
    文件夹:

    $ mkdir python
    $ cd python
    
    然后,在那里安装所需的Python库。 您可以使用单个库执行此操作:

    $ pip install --target . requests
    
    或者使用库列表(requirements.txt)

    最后,拉上拉链:

    $ zip -r dependencies.zip .
    
    2。创建一个图层


    3。将层添加到lambda函数

    请求
    不在标准库中。您需要研究如何在该平台上提供依赖关系;例如,通常使用
    requirements.txt
    文件来指定它们。看看@jornsharpe,我的机器上有虚拟环境设置。我是否应该上传do
    pip install-r requirements.txt上的所有内容?否,存在另一个错误:
    无法导入模块“main”:没有名为requests的模块
    您是否有包含请求库的.zip文件夹?在上传到lambda之前?这就是我在机器中使用虚拟环境的问题。如何从requirements.txt上传和检索依赖性?boto3和json都已包含在AWS lambda中,请参见选项1:显示此消息:/var/runtime/botocore/vendored/requests/api.py:67:DeprecationWarning:您正在使用来自“botocore.vendored.requests”的get()函数。这不是botocore中的公共API,将在将来删除。此外,此版本的请求已过期。我们建议您直接安装请求包“导入请求”,并使用requests.get()函数。我刚刚添加了提示。谢谢@ilvidel的提醒!根据更新版本的警告:“此依赖项已从Botocore中删除,并将在2020/03/31后从Lambda中删除。”请坚持选项2。文件夹结构应该是什么?你说的“请求层”是什么意思?我尝试了你的版本和其他一些版本(有或没有“RequesLayer”,有或没有“requests”),但没有运气。我没有看到任何这样的选项“在这里打开终端”
    $ pip install --target . -r requirements.txt
    
    $ zip -r dependencies.zip .