我有一个Lambda层,其中包括我的共享代码(数据模型)和pip包。我想把它导入到Lambda函数中并使用它。我能够添加Lambda层,使用pip包没有任何问题,但当我试图从这个公共层导入模型时。我一直得到以下错误:
'errorMessage': "Unable to import module 'app': attempted relative import beyond top-level package"
我认为这与层或函数的文件夹结构有关(更可能)。我遵循Lambda层的约定。
下面是我的图层的文件夹结构。
├── LICENSE
├── README.md
├── __init__.py
├── python
│ ├── lib
│ │ └── python3.9
│ │ └── site-packages
│ ├── model
│ │ ├── __init__.py
│ │ ├── a.py
│ │ ├── b.py
├── requirements.txt
├── samconfig.toml
└── template.yaml
下面是Lambda函数的结构:
├── README.md
├── __init__.py
├── events
│ └── event.json
├── openapi.yml
├── requirements.txt
├── samconfig.toml
├── src
│ ├── __init__.py
│ ├── app.py
│ ├── db.py
│ ├── service.py
├── template.yaml
我要做的是导入例如a.py从db.py中的model文件夹中,例如:
from model import a
但是它会导致我提到的错误:
'errorMessage': "Unable to import module 'app': attempted relative import beyond top-level package", 'errorType': 'Runtime.ImportModuleError'
已解决:显然不可能从这样的文件夹导入。我已经删除了模型文件夹,并在python目录下创建了一个新文件,比如models.py,复制并粘贴了我所有的模型到这个文件中。
现在以:import A from models.py works的形式导入模型。
一个可以工作的解决方案是将我的模型放在单独的文件中,但将它们全部导入到models.py文件中,并从函数本身导入。