Как обновить зависимость в проекте Python на Heroku

для моего проекта (Django) на Heroku я обновил одну из зависимостей в своих требованиях.txt-файл до более новой версии, и теперь я хочу, чтобы Heroku обновил установленную версию. Я попробовал:

heroku run "pip install -r requirements.txt --upgrade -E ."

который выплевывает правильный вывод на терминал, но, по-видимому, на самом деле ничего не обновляет; когда я запускаю:

heroku run "pip freeze -E ."

все версии пакета одинаковы. Я даже попытался удалить пакет, и это тоже не сработало. Как заставить обновление a зависимость в проекте Python от Heroku?

4 ответов


вы должны иметь возможность обновить его локально, а затем повторно запустить pip freeze. В пределах ваших требований.txt ==versionhere должна быть версия, которая устанавливается каждый раз, когда вы нажимаете.

когда вы запускаете heroku run, Его запуск в изолированном dyno, который он обновляется, а затем уничтожается. Чтобы изменение сохранялось, оно должно произойти во время git push, который будет скомпилирован в ваш slug.


быстрое обновление об этом, что теперь есть utils для выполнения этой функции.

https://github.com/heroku/heroku-repo

Howto

  1. установите плагин в вашем Heroku toolbelt

    heroku plugins:install https://github.com/heroku/heroku-repo.git

  2. очистить кэш Heroku для вашего приложения (эффективное удаление всех пакетов, установленных pip)

    heroku repo:purge_cache -a <APPNAME>

    документы: Это приведет к удалению содержимого кэша сборки, хранящегося в хранилище. Это делается внутри процесса запуска в приложении

  3. восстановить

    теперь вы можете нажать как обычно.
    В настоящее время толчок кажется единственным способом вызвать перестройку, см. перекомпилировать Heroku slug без нажатия или изменения конфигурации здесь на StackOverflow для больше информация.


Я хотел представить свой ответ на всякий случай, если кто-то сталкивается с тем же.

Heroku не обновляет пакеты, которые уже находятся в версии (что имеет смысл), однако он не может обновить пакет при установке из источника, даже если это другая фиксация.

решение, которое я нашел, заключается в принудительном обновлении с помощью крючка после компиляции с pip install --upgrade -r requirements.txt. Поскольку остальные пакеты закреплены, это влияет только на исходные пакеты.


Если по какой-то причине он все еще не обновляется, вы можете попробовать удалить зависимость, нажав на Git heroku master, а затем повторно добавить зависимость с правильной версией и снова нажать.