【问题标题】:How do I upgrade a dependency in a Python project on Heroku如何在 Heroku 上升级 Python 项目中的依赖项
【发布时间】:2012-03-17 06:43:15
【问题描述】:

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

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

向终端吐出正确的输出,但显然并没有真正升级任何东西;当我跑步时:

heroku run "pip freeze -E ."

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

【问题讨论】:

    标签: python heroku pip


    【解决方案1】:

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

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

    【讨论】:

    • 嗯,不走运。 FMI,包是Django。我的需求文件最初只是列出了安装 v1.3.1 的“Django”。现在我想使用开发版本,所以我将 requirements.txt 中的行更改为 git+git://github.com/django/django.git#egg=django。没有升级。甚至尝试过 git+git://github.com/django/django.git#egg=django==1.4b1 (我本地环境中列出的版本)。我找到了stackoverflow.com/a/9463068/123776,但我得到了“!Heroku push denied,错误获取自定义 buildpack”。
    • 你可以尝试使用特定的 git commit hash 吗?在您的 requirements.txt 中,它应该看起来像 git+git://github.com/django/django.git@aa4274f5716a044433b9dbfa0ad709453554e8e7
    • 实际上,这似乎有效:git+git://github.com/django/django.git@master#egg=django==1.4b1。不知道是不是我第一次做错了。或者也许是@master。但它奏效了。谢谢。
    • @CraigKerstiens Fwiw,这似乎是 heroku 的 pip 实现中的一个错误。如果你从包的 pypi 版本(例如 django 或 django==1.5.1)转到 github url,就像 OP 一样,heroku 的 pip 会有效地忽略它。当我的 requirements.txt 中有一个 pypi 包时,我曾多次遇到过这个问题,但不得不分叉它来修复一个错误并立即部署它。而且它不会将包更新到 github url,我必须开始搜索堆栈溢出以寻找解决方法......看起来 #egg= 可能是我正在寻找的黑客,但是一个修复会很好。
    • 看看这个,它就是 pip 的工作方式,与 Heroku 无关。选项是使用 #egg=== 或使用此技巧强制 heroku 重新安装环境:stackoverflow.com/a/15152659/652693
    【解决方案2】:

    对此进行快速更新,现在有工具可以完成此功能。

    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 上的 Recompile Heroku slug without push or config change 了解更多信息。

    【讨论】:

    • 也请给出一些内联解释。
    • 对不起,我错过了。如果您安装了工具heroku plugins:install https://github.com/heroku/heroku-repo.git,那么您将可以访问命令heroku repo:purge_cache -a appname。根据文档,“这将删除存储在存储库中的构建缓存的内容。这是在应用程序的运行过程中完成的”然后您可以正常推送,或使用heroku repo:rebuild -a appname 立即重建。
    【解决方案3】:

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

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

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

    【讨论】:

    【解决方案4】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-03-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-26
      • 2020-05-08
      • 2011-02-21
      相关资源
      最近更新 更多