Чтобы развернуть мое простое приложение 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? Я что-то не так делаю?