Я использую сторонние пакеты в своем приложении Flask.Когда я тестировал эти пакеты вне приложения и докера Flask, они работали просто отлично.Когда я включаю их в приложение, после сборки и запуска докер завершает работу при некоторых операциях импорта.Я не могу выяснить, что мне нужно сделать, чтобы он правильно импортировал модули.
Это структура проекта:
flask_app
├── Dockerfile
├── canetis
| ├── install.sh
| ├── __init__.py
| ├── align.py
| ├── utils.py
| ├── gentle
| ├── install.sh
| ├── gentle
| ├── __init__.py
| ├── resources.py
| ├── util
| ├── __init__.py
| ├── paths.py
| ├── ext
| ├── kaldi
| ├── install.sh
Пакет gentle
клонируется из git вcanetis/install.sh
скрипт.
Используемый файл dockerfile:
FROM python:2.7
RUN rm /bin/sh && ln -s /bin/bash /bin/sh
WORKDIR /app
RUN apt-get update
RUN pip install --upgrade pip
RUN apt-get update && \
apt-get -y install sudo
ADD ./requirements.txt ./requirements.txt
RUN pip install -r requirements.txt
ADD . /app
RUN cd ./canetis && ./install.sh && source ~/.bashrc
ENV WEB_CONCURRENCY 5
CMD gunicorn app:app
При сборке докера, если происходит сбой с этой ошибкой:
| Traceback (most recent call last):
| File "/usr/local/lib/python2.7/runpy.py", line 174, in _run_module_as_main
| "__main__", fname, loader, pkg_name)
| File "/usr/local/lib/python2.7/runpy.py", line 72, in _run_code
| exec code in run_globals
| File "/app/app.py", line 3, in <module>
| import tasks
| File "tasks.py", line 3, in <module>
| from canetis.align import align
| File "canetis/align.py", line 3, in <module>
| from utils import run_gentle
| File "canetis/utils.py", line 2, in <module>
| import gentle as gentle
| File "/usr/local/lib/python2.7/site-packages/gentle/__init__.py", line 2, in <module>
| from resources import Resources
| File "/usr/local/lib/python2.7/site-packages/gentle/resources.py", line 4, in <module>
| from util.paths import get_resource, ENV_VAR
| ImportError: No module named util.paths
Может быть, проблема в том, что модуль gentle имеетвложенная папка называется нежная и поэтому Python не может найти ее правильно?Но почему это работает вне докера?Любая помощь приветствуется.