如何在Heroku上升级Python项目中的依赖项

时间:2012-02-27 19:30:42

标签: python heroku pip

对于Heroku上的我的(Django)项目,我将requirements.txt文件中的一个依赖项更新为更新版本,现在我希望Heroku升级已安装的版本。我试过了:

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

哪个将正确的输出吐出到终端,但显然实际上没有升级任何东西;我跑的时候:

heroku run "pip freeze -E ."

所有包版本都相同。我甚至尝试删除包,但也没有用。如何在Heroku上强制升级Python项目中的依赖项?

4 个答案:

答案 0 :(得分:15)

您应该可以在本地升级它然后重新运行pip冻结。在您的requirements.txt中,== versionhere应该是每次推送时安装的版本。

当你运行heroku运行时,它在一个孤立的dyno中运行,然后它被升级然后被破坏。为了使更改保持不变,必须在git push期间将其编译到您的slug中。

答案 1 :(得分:7)

快速更新,现在有了utils来完成这个功能。

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

HOWTO

  1. 在Heroku工具栏中安装插件

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

  2. 清除应用的Heroku缓存(有效删除pip安装的所有软件包)

    heroku repo:purge_cache -a <APPNAME>

      来自文档的

      这将删除存储在中的构建缓存的内容   库。这是在应用程序的运行过程中完成的

  3. <强>重建

    您现在可以正常推动。
    目前推送似乎是导致重建的唯一方法,请参阅StackOverflow上的Recompile Heroku slug without push or config change以获取更多信息。

答案 2 :(得分:3)

我想提交我的答案以防万一有人面对同样的事情。

Heroku不会升级已经在版本中的软件包(这是有道理的),但是从源代码安装时无法升级软件包,即使它是一个不同的提交。

我找到的解决方案是使用pip install --upgrade -r requirements.txt的后编译钩子强制更新。因为其他软件包是固定的,所以它只影响源软件包。

答案 3 :(得分:0)

如果由于某种原因它仍然没有更新,你可能尝试的一件事是删除依赖项,推送到git heroku master,然后用正确的版本重新添加依赖项并再次推送。