Как обновить зависимость в проекте 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
-
установите плагин в вашем Heroku toolbelt
heroku plugins:install https://github.com/heroku/heroku-repo.git
-
очистить кэш Heroku для вашего приложения (эффективное удаление всех пакетов, установленных pip)
heroku repo:purge_cache -a <APPNAME>
документы: Это приведет к удалению содержимого кэша сборки, хранящегося в хранилище. Это делается внутри процесса запуска в приложении
-
восстановить
теперь вы можете нажать как обычно.
В настоящее время толчок кажется единственным способом вызвать перестройку, см. перекомпилировать Heroku slug без нажатия или изменения конфигурации здесь на StackOverflow для больше информация.
Я хотел представить свой ответ на всякий случай, если кто-то сталкивается с тем же.
Heroku не обновляет пакеты, которые уже находятся в версии (что имеет смысл), однако он не может обновить пакет при установке из источника, даже если это другая фиксация.
решение, которое я нашел, заключается в принудительном обновлении с помощью крючка после компиляции с pip install --upgrade -r requirements.txt
. Поскольку остальные пакеты закреплены, это влияет только на исходные пакеты.
Если по какой-то причине он все еще не обновляется, вы можете попробовать удалить зависимость, нажав на Git heroku master, а затем повторно добавить зависимость с правильной версией и снова нажать.