#python #heroku #conda
#python #heroku #conda
Вопрос:
ребята. Недавно я написал свое первое приложение python Flask, простое приложение для обработки данных, в котором библиотека Pandas является единственной дополнительной зависимостью (помимо самой Flask).
Он извлекает данные из онлайн-файлов CSV, обрабатывает их и возвращает несколько чисел внутри текста. (Я не использую базу данных. Он берет данные из этих онлайн-файлов и возвращает результат на экран браузера без его сохранения.)
Я создал его в среде conda, для которой я добавил только библиотеки Pandas и Flask. И он отлично работал на моем локальном хостинге.
Но теперь мне трудно развернуть его в Heroku…
Сначала я сгенерировал свой Procfile и requirements.txt файл с использованием pip:
pip freeze > requirements.txt
Но затем, когда я пытаюсь развернуть приложение, Heroku возвращает серию ошибок, связанных с зависимостями «mkl». Я не уверен, связаны ли они с pandas, но вот что это такое: mkl-service==2.3.0
, mkl_fft==1.3.0
и mkl_random==1.1.1
.
Я попытался изменить версии пакетов, выбрав версии, предложенные Heroku, но это не сработало mkl-service
, что, похоже, вообще не поддерживается Heroku. Затем я просто стер эту строку и рискнул. Мне удалось развернуть приложение без сообщений об ошибках, но затем приложение не запускается.
Я также попытался сгенерировать файл requirements.txr через conda, а не pip.
conda list -e requirements.txt
Он генерирует странный файл с операторами «=», а не «==», который я исправил с помощью поиска / замены и удаления информации о конечных крышках. На этот раз он также включал mkl==2020.2
зависимость, которая имеет более 300 МБ и не заставляла мое приложение работать должным образом.
Интересно, связана ли проблема с моим приложением с каким-то беспорядком, который я сделал, смешав conda и pip для своей среды. Или, может быть, это связано с тем, чтобы заставить pandas работать онлайн. Интересно, может быть, кто-нибудь из вас знает, что происходит не так.
Ответ №1:
Попробовав несколько комбинаций, мне удалось заставить приложение работать, создав requirements.txt для этого используются только имена gunicorn и пакеты, которые я изначально установил в своей локальной среде
Flask
pandas
gunicorn
Конечно, у Flask и pandas есть свои собственные зависимости, но оказывается, что Heroku автоматически устанавливает их, точно так же, как это делает pip. Итак, на этот раз, создание requirements.txt как можно проще сработало нормально.