ModuleNotFound в то время как приложение Dockering Python - PullRequest
0 голосов
/ 21 июня 2019

У меня есть простое приложение на 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" 

Но когда я пытаюсь докернизировать приложение, я получаю следующую ошибку:

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 голосов
/ 21 июня 2019

Попробуйте это работает ..

из parsers.parser import Parser

enter image description here

0 голосов
/ 21 июня 2019

Я не видел, чтобы вы указали какой-либо путь к модулю в контейнере, тогда для вашего случая папка app, которая запускает верхний скрипт run_it.py, была автоматически добавлена ​​к пути к модулю.

В результате, вы должны использовать следующее:

from parsers.parser import Parser

И еще один способ добавить рядом с вашим Dockerfile (предположим, это тоже папка с сетью):

ENV PYTHONPATH=/app

Тогда вы все равно можете использовать from mains.parsers.parser import Parser

...