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

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

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

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

heroku run "pip freeze -E ."

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

Ответ 1

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

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

Ответ 2

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

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

Howto

  • Установите плагин в toolbelt Heroku

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

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

    heroku repo:purge_cache -a <APPNAME>

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

  • Перестроить

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

Ответ 3

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

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

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