Как обновить зависимость в проекте 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
. Поскольку остальные пакеты закреплены, это влияет только на исходные пакеты.