我刚开始使用SAM使用AWS serverless,遇到以下问题:
SAM调用似乎找不到我的lambda处理程序正在导入的python模块,但我可以导入该模块。
我的项目结构如下:
根目录/
我在python3.6虚拟环境中工作,并使用安装工具安装了python包(mymodulename):
python setup.py develop
因此,如果我在虚拟环境中执行pip冻结,我会看到:
Pillow==6.0.0
PyPDF2==1.26.0
reportlab==3.5.20
mymodulename==0.5.0
如果我去:
cd root-dir/aws/sam/
python
>>> import mymodulename
这是成功的。因此,它位于python路径上。
但当我在本地调用sam时,即:
sam local invoke MyAWSServiceFunction --event ../sam/test/test_event.json
我收到错误消息:
2019-05-02 09:19:17 Found credentials in shared credentials file: ~/.aws/credentials
2019-05-02 09:19:18 Invoking app.lambda_handler (python3.6)
Fetching lambci/lambda:python3.6 Docker container image......
2019-05-02 09:19:19 Mounting /home/myname/root-dir/aws/sam/myawsservice as /var/task:ro,delegated inside runtime container
START RequestId: 245daefe-ecfb-4530-9d15-cf07f55e0f3d Version: $LATEST
Unable to import module 'app': No module named 'mymodulename'
END RequestId: 245daefe-ecfb-4530-9d15-cf07f55e0f3d
REPORT RequestId: 245daefe-ecfb-4530-9d15-cf07f55e0f3d Duration: 31 ms
Billed Duration: 100 ms Memory Size: 128 MB Max Memory Used: 19 MB
{"errorMessage": "Unable to import module 'app'"}
以下是my app.py的代码:
from mymodulename.mymodule import mymodulefunction
def lambda_handler(event, context):
return mymodulefunction(event['body'])
我可以从单元测试运行上面的代码,但不能从sam调用环境运行。
template.yaml:
AWSTemplateFormatVersion: '2010-09-09'
Transform: AWS::Serverless-2016-10-31
Description: > something
Globals:
Function:
Timeout: 3
Resources:
MyAWSServiceFunction:
Type: AWS::Serverless::Function
Properties:
CodeUri: myawsservice/
Handler: app.lambda_handler
Runtime: python3.6
帮助赞赏。
编辑:
一种解决方法是将app.py、requirements.txt和template.yaml放在根目录中,然后执行:
sam build
这将把第三方依赖项和我自己的python模块存储在一起,template.py现在可以在sam本地调用期间找到它。
然而,这对于更大的项目来说是不现实的,我想现在的答案可能是这样的。虽然这是serverless.yaml.但我不确定SAM是否支持这种语法。猜测没有。
这是一个很长的时间以来,这个问题是开放的,但它可能会帮助一些人。我是如何修复的:
mymodename/
移动到mymodename/mymodename/__init__. py
mymodename
中创建一个setup.py
负责创建一个名为mymodename
requirements.txt
中添加以下内容:-e mymodename/
-e
引用了您的本地代码,此链接可能也会有所帮助。
通常我可以使用npm安装一个库,但是今天在安装yeoman时我遇到了这个错误。请帮助找出根本原因。 我查看了文件夹: C:\Program Files\nodejs\node\u模块\npm\bin\ 但是,请不要将node_modules文件夹视为所描述的错误。 我也试着找到npm-cli.js,看到它实际上在
我在Mac上使用了蝗虫1.4.2,当我使用时,我得到了这个错误
问题内容: 我已经阅读了多篇文章和许多文章,详细介绍了cron作业中的脚本需要保留由于cron中shell的打开而在脚本本身内部运行所需的环境变量。我的情况是独特的,因为我的路径变量都是按照所讨论的那样设置的,这反过来将使用subprocess.call ()成功调用pysaunter python egg ,但是它似乎从那里分解了。这导致整个过程中断了cron作业。 为了清楚起见,以下是我引用的
我一直试图提交一个简单的python脚本,以便在一个带有Yarn的集群中运行它。当我在本地执行作业时,没有问题,一切都很好,但当我在集群中运行它时,它就失败了。 诊断:文件不存在:hdfs://myserver:8020/user/josholsan/.sparkstaging/application_1510046813642_0010/test.py 我不知道为什么它找不到test.py,我也
在一个项目中,我们将Hibernate与HikariCP结合使用,并且在Eclipse中一切都很好。但一旦我生成了一个jar文件(Maven),就再也找不到hikaricp了。我已经从各个可能的角度考虑了这个问题,但我无法找出问题所在。。。 坚持不懈xml 波姆。xml 如果我在Eclipse中运行此功能,则一切正常: 01:14:05,436信息HikariDataSource: 70-Hika
问题内容: 许多第三方Python模块都有一个属性,该属性保存该模块的版本信息(通常类似或),但有些则不然。 此类模块的特定示例是libxslt和libxml2。 我需要检查这些模块在运行时是否使用了正确的版本。有没有办法做到这一点? 潜在的解决方案是在运行时读取源代码,对其进行哈希处理,然后将其与已知版本的哈希进行比较,但这很讨厌。 有更好的解决方案吗? 问题答案: 我会远离哈希。正在使用的li