如何在python中部署函数及其依赖项?

2024-05-16 11:35:27 发布

您现在位置:Python中文网/ 问答频道 /正文

我尝试使用serverless框架来创建和部署AWS Lambda函数。我在项目的根目录下创建了一个名为vendored的文件夹,并安装了(使用pip install)函数依赖项。但是,每当我尝试运行它时(使用serverless function run),我得到一个错误:

Serverless: Running isNewUser...
Serverless: WARNING: This variable is not defined: region
Serverless: -----------------
Serverless: Failed - This Error Was Returned:
Serverless: {"exception": ["Traceback (most recent call last):\n", " File \"/home/fernando/.nvm/versions/node/v5.10.1/bin/serverless-run-python-handler\", line 170, in \n handler = import_program_as_module(path)\n", " File \"/home/fernando/.nvm/versions/node/v5.10.1/bin/serverless-run-python-handler\", line 149, in import_program_as_module\n module = make_module_from_file('lambda_handler', handler_file)\n", " File \"/home/fernando/.nvm/versions/node/v5.10.1/bin/serverless-run-python-handler\", line 129, in make_module_from_file\n py_source_description\n", " File \"/home/fernando/workspace/os-cac/isNewUser/handler.py\", line 11, in \n from vtex.order import Order\n", "ImportError: No module named vtex.order\n"], "success": false} Serverless: Exception message from Python
Serverless: Traceback (most recent call last): , File "/home/fernando/.nvm/versions/node/v5.10.1/bin/serverless-run-python-handler", line 170, in handler = import_program_as_module(path) , File "/home/fernando/.nvm/versions/node/v5.10.1/bin/serverless-run-python-handler", line 149, in import_program_as_module module = make_module_from_file('lambda_handler', handler_file) , File "/home/fernando/.nvm/versions/node/v5.10.1/bin/serverless-run-python-handler", line 129, in make_module_from_file py_source_description , File "/home/fernando/workspace/os-cac/isNewUser/handler.py", line 11, in from vtex.order import Order ,ImportError: No module named vtex.order `

vtex.order是在中导入的模块处理程序.py在

我的项目结构如下:

/root/
     |
     |--_meta/
     |--vendored/
                |--dependencies...
     |--function-name/
                     |--handler.py
                     |--event.json
                     |--s-function.json
     |--requirements.txt
     |--admin.env
     |--package.json
     |--s-project.json
     |--s-resources-cf.json
     |--s-project.json

我做错什么了吗?我是否应该配置我的函数以包含vendorded的依赖项?在


Tags: runinfromnodehomebinlineversions
3条回答

我建议使用serverless-python-requirements插件来包含通过pip安装的包

以下是一些可以使其发挥作用的步骤:

  1. 确保s-function.json中的处理程序项在其路径中具有函数名: "handler": "function-name/handler.handler",
  2. handler.py中添加以下内容:

    import os
    import sys
    
    here = os.path.dirname(os.path.realpath(__file__))
    sys.path.append(os.path.join(here, "../vendored"))
    
    from vtex.order import Order
    

就这样。告诉我是否有效。在

我按照以下步骤使用依赖项进行部署:

  • 在项目根目录mkdir .vendor

  • 在中添加依赖项要求.txt{/手动使用

  • 更新无服务器.yml文件

package: include: - .vendor/**

  • 包含.vendor目录到系统路径处理程序.py文件

import sys sys.path.insert(0, './.vendor')

  • 安装依赖项pip install -r requirements.txt -t .vendor

现在,serverless deploy将上载具有依赖关系的函数。在

相关问题 更多 >