我想使用 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'"
我还尝试对目录 models
和 utils
使用 COPY
而不是 ADD
,但它导致同样的错误。我该如何解决这个问题?
最佳答案
您缺少的是,如果您尝试将文件夹加载为包,则必须在 Python 中创建正确的打包。否则你可以一一获取 app.py
创建包的步骤:
- 创建文件夹名称
models
- 在
models
文件夹中创建__init__.py
文件 - 创建其他文件,例如
yolo.py
、experimental.py
、common.py
等 - 然后将所有四个加载到
__init__.py
文件中,如下所示
from common import *
from experimental import *
from yolo import *
- 然后您可以在
app.py
中使用它,例如import models
或from models import *
注意:将所有文件放在文件夹中不像Python中的包那样工作。
关于amazon-web-services - AWS lambda : "Unable to import module ' app': No module named 'models' ",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67736826/