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'"
我也曾尝试对目录 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.
中的包那样工作
我想用 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.
中的包那样工作