Python: невозможно импортировать модуль "flask -RESTPlus", когда используется Docker - PullRequest
0 голосов
/ 11 марта 2020

Я реализовал небольшое приложение Flask с использованием среды Docker.

Это моя структура проекта :

dockertest
├─ .vscode
│  └─ settings.json
├─ compose_flask
   ├─ Dockerfile
   ├─ app.py
   ├─ docker-compose.yml
   └─ requirements.txt

Это Dockerfile :

FROM python:3.8.0
ADD . /code
WORKDIR /code
RUN pip3 install -r requirements.txt
RUN pip3 install Werkzeug==0.16.0
CMD python app.py

Это needs.txt :

flask-restplus
flask
redis

Это docker -компонент .yml:

version: '2'
services:
    web:
        build: .
        ports:
            - "5000:5000"
        volumes:
            - .:/code
        depends_on:
            - redis
    redis:
        image: redis

И наконец мой app.py :

from flask import Flask
from redis import Redis
from flask_restplus import fields, Api, Resource

app = Flask(__name__)
redis = Redis(host='redis', port=6379)

@app.route('/')
def hello():
    redis.incr('hits')
    print(redis.incr('hits'))
    return 'This Compose/Flask demo has been viewed %s time(s).' % redis.get('hits')

if __name__ == "__main__":
    app.run(host="0.0.0.0", debug=True)

Сборка с командой: build -t compose-flask:latest . работает просто отлично! Когда я пытаюсь запустить контейнер с docker-compose up, появляется следующее сообщение об ошибке:

redis_1  | 1:M 10 Mar 2020 23:10:05.011 * Ready to accept connections
web_1    | Traceback (most recent call last):
web_1    |   File "app.py", line 4, in <module>
web_1    |     from flask_restplus import fields, Api, Resource
web_1    | ImportError: No module named flask_restplus
compose_flask_web_1 exited with code 1

Похоже, Python не может найти пакет flask -RESTPlus? Консольный вывод сборки сообщает мне, что flask -RESTPlus был успешно установлен. Странно то, что тот же пример без Docker прекрасно работает без каких-либо ошибок импорта !!

Я не могу понять, в чем проблема ... Я был бы рад, если бы кто-то мог помочь!

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