提问人:Henry 提问时间:3/15/2023 更新时间:3/15/2023 访问量:190
Python 没有名为 <foldername> 的模块,带有 docker 设置
Python no module named <foldername> with docker setup
问:
我有一个在 docker 容器中运行的 python 项目。
我的开发环境结构如下:
-- app
---- Module1
------ ClassM1.py
---- Module2
----- ClassM2.py
---- main.py
-- docker-compose.yml
在我的撰写文件中,我正在安装 ./app/:/app/
在开发时(在 PyCharm 中),我在 main.py 中使用了这个导入行,没有问题:
from app.Module1.ClassM1 import ClassM1
from app.Module1.ClassM2 import ClassM2
但是当我在容器中部署代码时,我得到
“ModuleNotFoundError:没有名为'app'的模块”
我已经尝试过:
- 在根目录中创建一个
__init__.py
export PYTHONPATH=.
- 导入 sys 并执行 sys.path.append(“./”)
我发现了一个类似的问题,但没有答案:Python/Docker - ModuleNotFoundError:没有名为
答:
0赞
Ajay Meena
3/15/2023
#1
默认情况下,它不应该在 docker 之外工作。导入文件时,Python 只搜索运行入口点脚本的目录和 sys.path,其中包括包安装目录等位置(实际上比这更复杂一些,但这涵盖了大多数情况)。
您可以使用以下功能:
from Module1.ClassM1 import ClassM1
from Module2.ClassM2 import ClassM2
PS:您的代码中有错别字
from app.Module1.ClassM2 import ClassM2 -> from app.Module2.ClassM2 import ClassM2
评论
0赞
Henry
3/18/2023
我可以在我的 main.py 中删除该应用程序,但现在我的问题是在 ClassM1 中我使用的是 ClassM2,但这里我再次出现 ModuleNotFound 错误......错别字是因为我手写了伪代码。我的正确模块结构有点复杂
评论
Dockerfile
docker-compose.yml
build: . volumes: - ./app/:/app/
FROM
WORKDIR
ENV PYTHONPATH=.:$PYTHONPATH
WORKDIR /apps
./app:/apps/app
cd /app && /usr/local/bin/python3 main.py
from app.ClassM2 import ClassM2