1.如果您有问题而不是错误/功能请求,请在http://forum.serverless.com上提出。2.请检查是否已存在问题,因此没有重复项。3.检查并遵循我们的准则: https://github.com/serverless/serverless/blob/master/CONTRIBUTING.md 4.填写整个模板,以便我们对该问题有一个很好的概述。5.不要删除模板的任何部分。 如果不适用,请将其留空,将其留在第6期中。请按照模板进行操作,否则我们将要求您更新它
对于错误报告:
我试图使用无服务器v1.6.0
在本地运行python lambda函数,但收到一个错误,提示找不到我的处理程序模块。
我预计这将起作用,因为此功能是在#2862中实现的
我怀疑这可能是由于我的文件夹结构引起的。 在我的情况下,python代码存储在src/serverless_lambda.py
,我使用一个激活的虚拟环境和一个setup.py。
设置setup.py
使得python可以在src/*
文件夹中找到模块,但是serverless invoke local
似乎无法像python / pip那样找到包。
(venv) $:serverless-lambda-template gmetzker$ serverless invoke local --function serverlessLambda --data '{"command": "joke"}'
Traceback (most recent call last):
File "/Users/gmetzker/hli-git/serverless-lambda-template/node_modules/serverless/lib/plugins/aws/invokeLocal/invoke.py", line 56, in <modul
e>
module = import_module(args.handler_path.replace('/', '.'))
File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/importlib/__init__.py", line 37, in import_module
__import__(name)
ImportError: No module named serverless_lambda
这是创建项目设置的方式:
-- src
-- __init__.py
-- serverless_lambda.py
-- serverless.yml
-- setup.py
-- venv
virtualenv venv
source ./venv/bin/activate
setup.py
在/src/serverless_lambda
查找模块from setuptools import Command, find_packages, setup
setup(
name='serverless-lambda',
version="1.0.0",
author = 'Gary Metzker',
py_modules='src/serverless_lambda',
install_requires=[
'boto3',
'requests'
],
packages = find_packages('src'),
package_dir={'':'src'},
extras_require = {
'test': ['coverage', 'pytest', 'pytest-cov', 'pytest-json', 'mock'],
},
entry_points='''
[console_scripts]
serverless-lambda=serverless_lambda:main
'''
)
setup.py
)pip install --editable .
serverless.yml
文件。
service: serverlessLambdaTemplate
custom:
stage: ${opt:stage, self:provider.stage}
lambdaBaseName: serverless-template-lambda
provider:
name: aws
runtime: python2.7
stage: dev
region: us-west-2
package:
# Use package.sh to create package.zip before deploying.
artifact: package.zip
functions:
serverlessLambda:
name: serverless-template-lambda-${self:custom.stage}
handler: serverless_lambda.entry_point
serverless invoke local --function serverlessLambda --data '{"command": "joke"}'
还要注意的另一件事是,当我部署lambda时,通常会有一个单独的package.sh
脚本,用于创建工件package.zip
。 在脚本中,将所有*.py
文件从src/*
压缩到zip的根目录中。 此外,虚拟环境站点包已添加到zip中。
setup.py
指定的相同包上下文,并在虚拟环境中使用pip install --editable .
注册该包上下文。它应该能够找到src/serverless_lambda.py
您使用的配置是什么?
往上看。
您从提供商那里看到了什么堆栈跟踪或错误消息?
Traceback (most recent call last):
File "/Users/gmetzker/hli-git/serverless-lambda-template/node_modules/serverless/lib/plugins/aws/invokeLocal/invoke.py", line 56, in <modul
e>
module = import_module(args.handler_path.replace('/', '.'))
File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/importlib/__init__.py", line 37, in import_module
__import__(name)
ImportError: No module named serverless_lambda
对于功能建议:
/src/lambda_handler.py
类的嵌套文件夹中,以便目录结构更整洁且源代码分开。setup.py
来干净地安装python依赖项并指定包和模块的位置。使用单独的package.sh
脚本将/src/*.py
和虚拟环境文件捆绑到lambda.zip中。 我将单独为我们的CI / CD系统执行此操作。
相似或相关的问题:
1.6.0
作业系统:
OSX
堆栈跟踪:
对于部署打包,您可能想要签出我也写的serverless-python-requirements ,但仍然需要推送2.0.0的稳定版本。
自#3346起就应解决此问题(请参阅:https://github.com/serverless/serverless/pull/3346#issuecomment-285469254)。
如果此问题仍然存在,请随时重新打开!
不知道这是否与上述问题有关,但是如果有人通过Google来到这里,请尝试以下操作:
npm install serverless --save-dev;
./node_modules/serverless/bin/serverless invoke local --function transferContent --data '{"content_type":"scholarship"}'
最有用的评论
不知道这是否与上述问题有关,但是如果有人通过Google来到这里,请尝试以下操作:
npm install serverless --save-dev;
./node_modules/serverless/bin/serverless invoke local --function transferContent --data '{"content_type":"scholarship"}'