Dockering python应用程序时的ModuleNotFound

时间:2019-06-21 13:58:38

标签: python docker docker-compose dockerfile python-import

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

│ 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"]

任何想法我该如何解决? 预先感谢!

2 个答案:

答案 0 :(得分:0)

我没有看到您在容器中设置任何模块路径,然后,针对您的情况,将运行顶部脚本app的文件夹run_it.py自动添加到模块路径。

因此,您应该使用next:

from parsers.parser import Parser

另一种方式也添加到您的Dockerfile旁边(假设它也是主文件夹):

ENV PYTHONPATH=/app

然后您仍然可以使用from mains.parsers.parser import Parser

答案 1 :(得分:-1)

尝试此方法。

从parsers.parser导入解析器

enter image description here