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

如何升级Heroku上Python项目中的依赖项,python,heroku,pip,Python,Heroku,Pip,对于我在Heroku上的(Django)项目,我将requirements.txt文件中的一个依赖项更新为一个新版本,现在我希望Heroku升级安装的版本。我试过: heroku run "pip install -r requirements.txt --upgrade -E ." 向终端输出正确的输出,但显然没有实际升级任何内容;当我跑步时: heroku run "pip freeze -E ." 所有软件包版本都相同。我甚至试着取下包裹,但也没用。如何在Heroku上强制升级Pyth

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

heroku run "pip install -r requirements.txt --upgrade -E ."
向终端输出正确的输出,但显然没有实际升级任何内容;当我跑步时:

heroku run "pip freeze -E ."

所有软件包版本都相同。我甚至试着取下包裹,但也没用。如何在Heroku上强制升级Python项目中的依赖项?

您应该能够在本地升级依赖项,然后重新运行pip freeze。在requirements.txt中,==versionhere应该是每次推送时安装的版本


当你运行heroku run时,它在一个孤立的dyno中运行,升级后被销毁。为了保持更改,它必须在git push期间发生,以便编译到slug中。

快速更新,现在有UTIL来完成此功能

如何
  • 在Heroku工具带中安装插件

    heroku插件:安装https://github.com/heroku/heroku-repo.git

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

    heroku repo:purge_cache-a在StackOverflow上查看更多信息


  • 我想提交我的答案,以防有人面临同样的问题

    Heroku不会升级版本中已经存在的包(这很有意义),但是从源代码安装时,即使是不同的提交,它也无法升级包


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

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

    嗯,不走运。FMI,该软件包为Django。我的需求文件最初只是列出了“Django”,它安装了v1.3.1。现在我想使用dev版本,所以我将requirements.txt中的行更改为git+git://github.com/django/django.git#egg=django. 没有发生升级。甚至试过git+git://github.com/django/django.git#egg=django==1.4b1 (我的本地环境中列出的版本)。我找到了,但我得到了“!Heroku push被拒绝,获取自定义buildpack时出错”。您可以使用特定的git提交散列进行尝试吗?在您的requirements.txt中,它应该看起来像git+git://github.com/django/django.git@AA4274F5716A04433B9DBFA0AD709453554E8E7实际上,这似乎起到了作用:git+git://github.com/django/django.git@大师#蛋=django==1.4b1。不知道我第一次是否做错了。或者可能是@master。但它奏效了。谢谢。@CraigKerstiens Fwiw,这似乎是heroku的pip实现中的一个错误。如果您像OP一样从pypi版本的包(例如django或django==1.5.1)转到github url,heroku的pip实际上会忽略它。当我在requirements.txt中有一个pypi包时,我已经多次遇到这个问题,但我不得不用它来修复一个bug并立即部署它。而且它不会将包更新到github url,我必须开始搜索堆栈溢出以找到解决方法。。。看起来#egg=可能是我正在寻找的黑客,但修复会很好。看看这个,这只是pip的工作方式,没有特定于Heroku的。选项是使用#egg===或使用以下技巧强制heroku重新安装环境:请给出一些内联解释。很抱歉,我错过了这个。如果您安装了工具
    heroku插件:安装https://github.com/heroku/heroku-repo.git
    然后您可以访问命令
    heroku repo:purge\u cache-a appname
    。根据文档,“这将删除存储在存储库中的构建缓存的内容。这是在应用程序的运行进程中完成的”,然后您可以按正常方式推送,或者使用
    heroku repo:rebuild-a appname
    立即重建。以下是实现这一点的一些步骤: