AWS 拉姆达:"Unable to import module 'app': No module named 'models'"

AWS lambda: "Unable to import module 'app': No module named 'models'"

我想用 aws sam 部署一个 pytorch 模型。我的文件夹结构如下所示:

├── Dockerfile
├── __init__.py
├── app.py
├── models
│   ├── common.py
│   ├── experimental.py
│   └── yolo.py
├── requirements.txt
└── utils
    ├── autoanchor.py
    ├── datasets.py
    ├── general.py
    ├── google_utils.py
    ├── metrics.py
    ├── plots.py
    └── torch_utils.py

如您所见,我有几个本地依赖项。我的 Dockerfile 如下所示:

FROM public.ecr.aws/lambda/python:3.8

COPY app.py requirements.txt ./
ADD models utils ./

RUN python3.8 -m pip install -r requirements.txt -t .

# Command can be overwritten by providing a different command in the template directly.
CMD ["app.lambda_handler"]

app.py 中的代码从 models 导入模块。不幸的是,这不起作用并产生以下错误:

"errorMessage": "Unable to import module 'app': No module named 'models'"

我也曾尝试对目录 modelsutils 使用 COPY 而不是 ADD,但它会导致相同的错误。我该如何解决这个问题?

您缺少的是,如果您尝试将文件夹作为包加载,则必须在 Python 中创建适当的包装。否则,您可以将所有文件一一导入 app.py

创建包的步骤:

  1. 创建文件夹名称models
  2. models 文件夹中创建 __init__.py 文件
  3. 创建其他文件,如 yolo.pyexperimental.pycommon.py
  4. 然后将所有四个加载到 __init__.py 文件中,如下所示
from common import *
from experimental import *
from yolo import *

  1. 然后您可以在 app.py 中使用它,例如 import modelsfrom models import *

注意 : 将所有文件一起放入文件夹不像 Python.

中的包那样工作

参考代码:https://github.com/aviboy2006/flask-rest-api