Как правильно установить пользовательский пакет в Docker с docker -compose? - PullRequest
1 голос
/ 01 мая 2020

Я создаю flask API и хочу создать docker его изображение. Однако, когда я выполняю docker -компонентный запуск (после сборки), он не может найти модуль.

Ошибка:

api_1  | Traceback (most recent call last):
api_1  |   File "app.py", line 6, in <module>
api_1  |     from api.classify.classify import get_prediction
api_1  | ModuleNotFoundError: No module named 'api'

Структура моей папки выглядит следующим образом:

- api
-- classify
--- classify.py
-- app.py
-- Dockerfile
-- requirements.txt
-- setup.py

setup.py выглядит следующим образом:

from setuptools import setup, find_packages


setup(
    name='image_api',
    keywords='',
    version='0.1',
    packages=find_packages()
)

А Dockerfile выглядит следующим образом:

FROM python:3
WORKDIR /user/src/app
ENV PYTHONPATH=/api
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY . .
RUN python setup.py install
CMD ["python", "app.py"]

Как это исправить и какие рекомендации лучше установить пользовательские пакеты при создании Docker изображения?

1 Ответ

0 голосов
/ 01 мая 2020

Вы никогда не должны перезаписывать PYTHONPATH таким образом, nstead добавьте ваш путь, иначе система не найдет установленные Python пакеты.

Вы можете выполнить одно из следующих действий, чтобы заставить его работать:

  1. RUN export PYTHONPATH = "$ PYTHONPATH: / api"
  2. ENV PYTHONPATH = "$ PYTHONPATH: / api"

Также ваш файл Docker должен быть включен Уровень API, он не сможет найти его в существующей структуре каталогов.

...