Не удается развернуть приложение Python на Heroku с использованием образа Docker и миниконды - PullRequest
0 голосов
/ 27 марта 2019

Чтобы развернуть мое простое приложение Python на Heroku, я вынужден использовать образ Docker, потому что такие пакеты, как scipy, не будут работать в стандартной сборке Python Heroku. Я должен использовать cartopy (https://scitools.org.uk/cartopy/docs/latest/),, который требует довольно много зависимостей (включая scipy). Единственный способ установить его правильно и легко (насколько я знаю) - conda.

В официальной документации Heroku они советуют следовать этому примеру https://github.com/heroku-examples/python-miniconda,, который довольно устарел ... Поэтому я настроил свою среду настолько близко, насколько это возможно, имея такой Dockerfile в корне мой проект.

FROM heroku/miniconda

ADD ./webapp/requirements.txt /tmp/requirements.txt

RUN pip install -qr /tmp/requirements.txt

ADD ./webapp /opt/webapp/
WORKDIR /opt/webapp

RUN conda install -c anaconda cartopy matplotlib pycairo

CMD gunicorn --bind 0.0.0.0:$PORT wsgi

Как вы видите, я устанавливаю с conda только те пакеты, которые я не могу установить (из-за некоторых неясных ошибок, связанных с зависимостями) с pip.

Мой requirements.txt довольно прост.

gunicorn
Flask
Werkzeug
lxml
requests
pandas
numpy

Конечно, я хочу убедиться, что Gunicorn установлен таким образом, чтобы его можно было использовать в качестве команды.

Я могу развернуть приложение, НО после его запуска происходит сбой из-за некоторых ошибок импорта. В частности, он не может импортировать установку cartopy. Это странно, учитывая, что импорт matplotlib не завершился неудачей, и matplotlib также был установлен через conda (а не pip). Мне интересно, должен ли я установить некоторую переменную среды в Dockerfile, чтобы Python находил эти библиотеки?

У кого-нибудь есть советы по развертыванию приложений Python с использованием таких модулей, как cartopy, через образы Docker? Я что-то не так делаю?

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