Heroku не удалось развернуть приложение python Pandas

#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 как можно проще сработало нормально.