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

mju*_*ewu 12 python pip heroku

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

heroku run "pip install -r requirements.txt --upgrade -E ."
Run Code Online (Sandbox Code Playgroud)

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

heroku run "pip freeze -E ."
Run Code Online (Sandbox Code Playgroud)

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

Cra*_*ens 16

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

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

  • 看看这个,它只是pip的工作方式,没有什么特别的Heroku.选项是使用#egg = <package-name> == <新版本>或强制heroku使用此技巧重新安装环境:http://stackoverflow.com/a/15152659/652693 (3认同)
  • 嗯,没有运气.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(我的本地环境中列出的版本).我找到了http://stackoverflow.com/a/9463068/123776,但我得到了"!Heroku推送被拒绝,错误提取自定义buildpack". (2认同)
  • 实际上,这似乎有效:git + git://github.com/django/django.git@master#egg=django==1.4b1.不确定我第一次做错了.或者也许是@master.但它奏效了.谢谢. (2认同)

dbi*_*tti 7

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

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

如何

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

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

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

    heroku repo:purge_cache -a <APPNAME>

    来自文档: 这将删除存储在存储库中的构建缓存的内容.这是在应用程序的运行过程中完成的

  3. 重建

    你现在可以正常推动.
    目前推送似乎是导致重建的唯一方法,请参阅StackOverflow上的重新编译Heroku slug而不进行推送或配置更改以获取更多信息.


txo*_*mon 7

我想提交我的答案,以防万一有人遇到同样的情况。

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

我找到的解决方案是通过使用带有pip install --upgrade -r requirements.txt. 由于其余包已固定,因此它仅影响源包。