8

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

无服务器:正在运行 isNewUser ...
无服务器:警告:未定义此变量:区域
无服务器:-----------------
无服务器:失败 - 返回此错误:
无服务器:{“异常”:[“回溯(最近一次调用最后一次):\n”,“文件\”/home/fernando/.nvm/versions/node/v5.10.1/bin/serverless-run-python-handler \",第 170 行,在 \n handler = import_program_as_module(path)\n", " File \"/home/fernando/.nvm/versions/node/v5.10.1/bin/serverless-run-python-handler\" ,第 149 行,在 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\",第 129 行,在 make_module_from_file\n py_source_description\n"," File \"/home/fernando/workspace/os-cac/isNewUser/handler.py\",第 11 行,在 \n 中来自 vtex.order 导入Order\n", "ImportError: No module named vtex.order\n"],"success": false} 无服务器:来自 Python 的异常消息
无服务器:回溯(最近一次调用最后一次):,文件“/home/fernando/.nvm/versions/node/v5.10.1/bin/serverless-run-python-handler”,第 170 行,在 handler = import_program_as_module(path) , 文件 "/home/fernando/.nvm/versions/node/v5.10.1/bin/serverless-run-python-handler", 第 149 行, 在 import_program_as_module 模块 = make_module_from_file('lambda_handler', handler_file) , 文件 "/home /fernando/.nvm/versions/node/v5.10.1/bin/serverless-run-python-handler”,第 129 行,在 make_module_from_file py_source_description 中,文件“/home/fernando/workspace/os-cac/isNewUser/handler.py ",第 11 行,从 vtex.order 导入 Order ,ImportError: No module named vtex.order `

vtex.order是在 handler.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

有什么我做错了吗?我应该以某种方式配置我的函数以包含来自 vendored 的依赖项吗?

4

3 回答 3

9

这里有几个步骤可以让它工作:

  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
    

而已。让我知道它是否有效。

于 2016-04-29T18:00:28.350 回答
4

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

  • 在项目根目录中为依赖项创建目录mkdir .vendor

  • 在 requirements.txt 文件中手动添加依赖项或使用pip freeze > requirements.txt

  • 更新 serverless.yml 文件

package: include: - .vendor/**

  • 在 handler.py 文件中包含 .vendor 目录到系统路径

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

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

现在serverless deploy将上传带有依赖项的函数。

于 2017-01-13T12:18:11.587 回答
4

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

于 2017-09-01T12:51:12.040 回答