ModuleNotFound while Dockering python 应用程序

ModuleNotFound while Dockering python app

我有一个简单的 python 应用程序,它使用我创建的自定义 class。以下文件夹结构如下:

│ mains
|   ├── run_it.py
|   ├── __init__.py
│   ├── parsers
    │   ├── parser.py
    │   ├── __init__.py

在run_it.py主程序中,我调用

from mains.parsers.parser import Parser

在本地模式下,我在 ~/.bashrc 中添加了以下行并且效果很好:

export PYTHONPATH="${PYTHONPATH}:/home/.../THE_FOLDER_ABOVE_MAINS" 

但是当我尝试对应用程序进行 docker 化时,出现以下错误:

File "/app/run_it.py", line 11, in <module>
from mains.parsers.parser import Parser
ModuleNotFoundError: No module named 'mains'

我的 Dockerfile 是:

FROM python:3

RUN mkdir /app
WORKDIR /app
ADD . /app/

RUN apt-get update
RUN pip3 install gunicorn
RUN pip3 install -r requirements.txt

EXPOSE 5000

ENV PYTHONIOENCODING=utf-8

ENV GUNICORN_CMD_ARGS="--bind 0.0.0.0:5000 --workers=2"
CMD ["gunicorn","run_it:app"]

知道我该如何解决吗? 提前致谢!

我没有看到你在容器中设置任何模块路径,那么对于你的情况,文件夹 app 其中 运行 顶级脚本 run_it.py 被自动添加到模块路径.

因此,您应该使用下一个:

from parsers.parser import Parser

另一种方法也可以添加到您的 Dockerfile 旁边(假设它与 mains 的文件夹相同):

ENV PYTHONPATH=/app

那你还可以用from mains.parsers.parser import Parser

尝试一下它的工作..

从 parsers.parser 导入解析器