提问人:meowmeow 提问时间:11/14/2023 更新时间:11/15/2023 访问量:33
如何正确构建 AWS Lambda Python 层以避免导入错误?
How do I properly structure AWS Lambda Python Layer to avoid Import Errors?
问:
我在 AWS Lambda 中有一个自定义 python 层,其结构如下:
/python
|_/m_utilities
|_/functions
|_/__init__.py
|_/Defaults.py
|_/Athena.py
|_/parameterizer
|_/classes
|_/__init__.py
|_/AthenaLite.py
|_/BaseParameter.py
|_/__init__.py
|_/misc
- 参数化程序 init.py 包含
from parameterizer.classes.AthenaLite import athena_parameterizer as athena_lite
lambda 处理程序以以下方式开头:
from m_utilities.functions.Athena import <various functions>
from m_utilities.parameterizer import athena_lite
这种结构在本地按预期工作,我可以毫无问题地导入所有内容。但是,当我尝试测试lambda时,出现错误:[ERROR] Runtime.ImportModuleError:无法导入模块“parameterizer”
在尝试调试时,我尝试的一件事是编辑 lambda 处理程序以检查文件夹结构(看起来正确)并打印掉m_utilities包中的模块以查看我的“参数化器”模块是否存在。
在 lambda 处理程序中:
try:
from m_utilities.parameterizer import athena_lite
except:
import os.path, pkgutil,m_utilities
pkgpath = os.path.dirname(fp_utilities.__file__)
print([name for _, name, _ in pkgutil.iter_modules([pkgpath])])
AWS 中的回报:
['functions', 'messaging', 'parameterizer', 'misc']
该模块似乎在那里,那么我做错了什么,以至于它无法导入它?
答:
0赞
meowmeow
11/15/2023
#1
出于某种原因,我不确定为什么,这种结构在 AWS 中有效:
/python
|_/m_utilities
|_/functions
|_/__init__.py
|_/Defaults.py
|_/Athena.py
|_/parameterizer
|_/classes
|_/__init__.py
|_/AthenaLite.py
|_/BaseParameter.py
|_/__init__.py
|_/misc
我将“参数化器”模块移动到顶级文件夹中,然后开始工作。from parameterizer import athena_lite
评论
parameterizer
__init.py__