对于Heroku上的我的(Django)项目,我将requirements.txt文件中的一个依赖项更新为更新版本,现在我希望Heroku升级已安装的版本。我试过了:
heroku run "pip install -r requirements.txt --upgrade -E ."
哪个将正确的输出吐出到终端,但显然实际上没有升级任何东西;我跑的时候:
heroku run "pip freeze -E ."
所有包版本都相同。我甚至尝试删除包,但也没有用。如何在Heroku上强制升级Python项目中的依赖项?
答案 0 :(得分:15)
您应该可以在本地升级它然后重新运行pip冻结。在您的requirements.txt中,== versionhere应该是每次推送时安装的版本。
当你运行heroku运行时,它在一个孤立的dyno中运行,然后它被升级然后被破坏。为了使更改保持不变,必须在git push期间将其编译到您的slug中。
答案 1 :(得分:7)
快速更新,现在有了utils来完成这个功能。
https://github.com/heroku/heroku-repo
在Heroku工具栏中安装插件
heroku plugins:install https://github.com/heroku/heroku-repo.git
清除应用的Heroku缓存(有效删除pip安装的所有软件包)
heroku repo:purge_cache -a <APPNAME>
来自文档的: 这将删除存储在中的构建缓存的内容 库。这是在应用程序的运行过程中完成的
<强>重建强>
您现在可以正常推动。
目前推送似乎是导致重建的唯一方法,请参阅StackOverflow上的Recompile Heroku slug without push or config change以获取更多信息。
答案 2 :(得分:3)
我想提交我的答案以防万一有人面对同样的事情。
Heroku不会升级已经在版本中的软件包(这是有道理的),但是从源代码安装时无法升级软件包,即使它是一个不同的提交。
我找到的解决方案是使用pip install --upgrade -r requirements.txt
的后编译钩子强制更新。因为其他软件包是固定的,所以它只影响源软件包。
答案 3 :(得分:0)
如果由于某种原因它仍然没有更新,你可能尝试的一件事是删除依赖项,推送到git heroku master,然后用正确的版本重新添加依赖项并再次推送。