这是一个后续问题:这个问题
我正在尝试使用无服务器框架将一些共享的Python代码作为lambda层上传到AWS lambda。
我遵循了@msc的解决方案(经过一些修改(:
项目1:
步骤1:创建一个具有以下结构的无服务器项目:
./
└ serverless.yml
└ common/
└ python/
└ Other packages as per requirements.txt
└ my_shared_script.py - my own package
步骤2:设置我的.yml
文件:
service: library
provider:
name: aws
runtime: python3.7
stage: dev
region: ap-northeast-1
layers:
Common:
path: common
resources:
Outputs:
CommonLayerExport:
Value:
Ref: CommonLambdaLayer
Export:
Name: CommonLambdaLayer
步骤3:将我的需求安装到common/python/
文件夹中:
requirements.txt:
pandas==1.0.5
将要求安装到文件夹:pip install -r requirements.txt ./common/python/
项目2
步骤1:在我的.yml
文件中引用项目1中的上传层:
functions:
hello:
handler: handler.hello
layers:
- arn:aws:lambda:ap-southeast-1:182739821739:layer:Common:1
步骤2:所有导入现在都可以工作。来自我的handler.py
:
import pandas
import my_shared_script
def hello(event, context):
print(my_shared_script.foo())
函数foo()
按预期运行。
我现在的问题是,my_shared_script.py
现在与所有安装的Python包都在同一个文件夹中(有很多文件和文件夹(,这使得我很难找到和维护自己的模块/脚本。
./
└ serverless.yml
└ common/
└ python/
└ Other packages as per requirements.txt
└ lib/
└ my_shared_script.py - my own package
对我来说,将自己的脚本放在一个单独的文件夹/lib
中并将所有其他需求安装到/python
文件夹中是有意义的。
但是,如果我使用上面的文件夹结构,代码就会失败。
我已经把它放在项目2中handler.py
的顶部,希望脚本能够在/lib
中找到我的代码。
import os
import sys
CWD = os.path.dirname(os.path.realpath(__file__))
sys.path.insert(0, os.path.abspath(os.path.join(CWD, "../lib")))
我很难理解这个无服务器框架中的Python路径/文件夹结构。。。希望一些专家能分享他们的解决方案,谢谢。
试试这个
import pandas
import sys
try:
sys.path.index('/opt/lib')
except ValueError:
sys.path.append('/opt/lib')
import my_shared_script
def hello(event, context):
print(my_shared_script.foo())