Python aws lambda无法导入模块';lambda_函数';:没有名为';请求';

Python aws lambda无法导入模块';lambda_函数';:没有名为';请求';,python,amazon-web-services,logging,lambda,amazon-cloudwatch,Python,Amazon Web Services,Logging,Lambda,Amazon Cloudwatch,我最近开始使用AWS Lambda对我编写的一些python代码使用触发器。我目前有2个lambda函数,它们都是用ZIP文件创建的。我创建的第二个是用来测试触发事件的 这是为了测试目的,所以我使用了最好的代码: def lambda_handler(event, context): print ("Hello World") 但是,我得到了这个错误: Response: { "errorMessage": "Unable to import module 'lambda_func

我最近开始使用AWS Lambda对我编写的一些python代码使用触发器。我目前有2个lambda函数,它们都是用ZIP文件创建的。我创建的第二个是用来测试触发事件的

这是为了测试目的,所以我使用了最好的代码:

def lambda_handler(event, context):
    print ("Hello World")
但是,我得到了这个错误:

Response:
{
  "errorMessage": "Unable to import module 'lambda_function'"
}

Request ID:
"65024f16-172c-11e8-ab26-27ff3322e597"

Function Logs:
START RequestId: 65024f16-172c-11e8-ab26-27ff3322e597 Version: $LATEST
Unable to import module 'lambda_function': No module named 'requests'

END RequestId: 65024f16-172c-11e8-ab26-27ff3322e597
REPORT RequestId: 65024f16-172c-11e8-ab26-27ff3322e597  Duration: 15.93 ms  
Billed Duration: 100 ms     Memory Size: 128 MB Max Memory Used: 22 MB  
在我搜索过的所有地方,答案都是通过确保函数名称正确或.zip文件可读来解决的。我已经满足了这两个条件(文件名为lambda_function.py,在根目录中)


或者,看起来可能是日志的问题。我仔细检查了我的权限,我可以使用所有资源创建日志。还有什么其他想法吗?

请求
库在lambda中默认不存在。看起来您正试图将其导入函数/库中的某个位置。要导入它,需要以下行:

from botocore.vendored import requests
或者,您需要将
请求
库压缩到zip文件的根目录中

编辑:您的某个库中可能存在需要此功能的依赖项。要克服此问题,请在应用程序zip中安装
请求
。为此,在应用程序的根目录中运行以下命令:
pip install requests-t./

更好的方法是创建一个名为
requirements.txt
的文件,并在其中添加所有依赖项。使用virtualenv安装requirements.txt中定义的所有软件包,使用:
pip install-r requirements.txt-t./


更新:从19年10月21日开始,botocore中请求库的供应商版本将被删除。有关更多详细信息,请参阅。

AWS从Botocore中删除了
请求的供应商版本

步骤:

  • cmd>
    pip安装请求

  • Python代码:

    import requests
    response = requests.get('https://...') 
    
  • 检查一下这个

    如果您在AWS Lambda上使用Python,并且需要使用请求,您最好使用它,AWS Lambda当前支持它,您可以直接导入它,请查看urllib3站点上的示例

    导入urllib3
    http=urllib3.PoolManager()
    r=http.request('GET','http://httpbin.org/robots.txt')
    r、 资料
    #b'用户代理:*\n默认:/deny\n'
    r、 地位
    # 200
    
    这就是我的问题所在

    处理程序::“yfinance_lamdba.lambda_处理程序”

    在上面的行中

                   **yfinance_lamdba** is filename 'yfinance_script.py'
    
                   **lambda_handler** is function 'def lambda_handler' which has actual code
    

    这肯定会奏效。只需按照以下步骤操作:

    在任何空目录中创建一个“python”目录,并在那里安装模块

    mkdir lambda_layers
    cd lambda_layers
    mkdir python
    cd python
    pip install requests -t ./
    cd ..
    zip -r python_modules.zip .
    
    如果您希望在一个层中有多个模块,那么将它们安装在刚刚创建的同一个“python”目录中

    只需确保使用'-r'递归地压缩“python”目录本身。通过这种方式,lambda处理程序可以在您使用的默认python版本中定位模块


    现在您有了包含所有依赖模块的“python_modules.zip”文件。转到AWS控制台中的Lambda层,并创建一个上载此zip文件的层。根据lambda函数中使用的python版本选择运行时,也可以选择多个python运行时版本。将此层添加到lambda函数中,您应该能够完美地导入模块。

    我也看到了答案,只是再次尝试,但没有成功。使用应用程序根目录中的命令安装
    请求
    pip Install requests-t./
    。完成后,压缩应用程序并将其上载到函数。如果你有一个requirements.txt文件,请将
    请求添加到其中。啊,我明白了。我的一个导入需要requests模块,这个模块修复了它。它要求更多,但我现在明白了。谢谢什么是botocore.vendored
    ?欢迎使用SO!我不能完全理解你的答案。请您编辑一下,这样您建议的解决方案会更清晰一些?谢谢添加了更多信息,如果需要更多信息,请告诉我clarification@MyKoryto