如何正确构建AWS Lambda Python层以避免导入错误?

zzoitvuj  于 2023-11-20  发布在  Python
关注(0)|答案(1)|浏览(100)

我在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]错误。ImportModuleError:Unable to import module 'parameterizer'
当尝试调试时,我尝试的一件事是编辑lambda处理程序来检查文件夹结构(看起来是正确的),并打印出 m_utilities 包中的模块,看看我的“parameterizer”模块是否存在。
在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']


模块似乎在那里,那么我做错了什么,它无法导入它?

vs3odd8k

vs3odd8k1#

出于某种原因,我不知道为什么,这个结构在AWS中工作:

/python
|_/m_utilities
  |_/functions
    |_/__init__.py
    |_/Defaults.py
    |_/Athena.py
|_/parameterizer
  |_/classes
    |_/__init__.py
    |_/AthenaLite.py
    |_/BaseParameter.py
  |_/__init__.py
|_/misc

字符串
我把“parameterizer”模块移到了顶层文件夹中,from parameterizer import athena_lite工作了。

相关问题