【问题标题】:how to pip uninstall with virtualenv on heroku cedar stack?如何在 heroku cedar 堆栈上使用 virtualenv 进行 pip 卸载?
【发布时间】:2012-02-14 19:28:43
【问题描述】:

我试图卸载 heroku 上的一个模块:

heroku 运行 bin/python bin/pip 卸载任何东西

Pip 在 /app 树中显示模块,然后声称已卸载该模块,但再次运行相同的命令显示它已安装在 /app 树中的相同位置。

有没有办法让 pip uinstall 成功?


Heroku run 实例化一个新的测功机并仅运行该测功机中指定的命令。 Dynos 是短暂的,这就是为什么 pip 卸载的结果不粘的原因。

【问题讨论】:

  • 您是否提前确认了激活的来源?

标签: python heroku virtualenv pip


【解决方案1】:

2013-09-30 更新:当前清除 virtualenv 的方法似乎在 runtime.txt as stated on GithubHeroku's devcenter reference 中指定了不同的 python 运行时版本。

请注意,Heroku 目前“仅认可并支持使用 Python 2.7.4 和 3.3.2”,因此除非您的应用程序同时支持 Python 2.7.4 和 3.3.2,否则您可能希望使用您自己的运行时对其进行测试'会想要切换到(目前可在http://envy-versions.s3.amazonaws.com/$PYTHON_VERSION.tar.bz2 获得,尽管在大多数情况下切换例如在 2.7.4 和 2.7.3 之间应该不是问题)。

感谢@Jesse 提供最新的answer 以及让我意识到这个问题的评论者。


于 2012 年 11 月更新(我没有更新链接的 buildpack,我的 pull request 已关闭,并且官方 buildpack 在某个时候删除了 CLEAN_VIRTUALENV 功能) :

正如 David 所解释的,您不能 pip 卸载一个包,但您可以清除并重新安装整个 virtualenv。使用user-env-compile 实验室功能和CLEAN_VIRTUALENV option 清除virtualenv:

heroku labs:enable user-env-compile
heroku config:add CLEAN_VIRTUALENV=true

目前这不起作用,因为存在错误。您需要使用 buildpack 的 my fork 直到此 get fixed upstream(拉取请求已关闭):

heroku config:add BUILDPACK_URL=https://github.com/blaze33/heroku-buildpack-python.git

现在推送你的新代码,你会发现整个 virtualenv 都被重新安装了。

Andrey 的回答自 2012 年 3 月 23 日起不再有效。new style virtualenv 提交将虚拟环境从 /app 移动到 /app/.heroku/venv 但 purge 分支没有更新以赶上,因此您最终得到一个不在 PYTHONHOME 中的 virtualenv。

为避免在每次推送后重新安装所有内容,请禁用该选项:

heroku labs:disable user-env-compile
heroku config:remove CLEAN_VIRTUALENV BUILDPACK_URL

【讨论】:

  • 嗨@maximeR。 , 令人印象深刻的解决方案。效果很好。我不知道为什么它只有我的投票。
  • 当我添加 buildpack_url 并推送到 Heroku 时,我得到“!Heroku 推送被拒绝,获取自定义 buildpack 时出错”。知道为什么会这样吗?
  • 尝试使用 HTTPS 版本的 buildpack URL:https://github.com/blaze33/heroku-buildpack-python.git
  • 现在,它的工作!看起来这个 buildpack 被 Heroku 合并了。您只需设置heroku config:add CLEAN_VIRTUALENV=true
  • 旧的 buildpack 导致我出错。唯一(目前)支持的解决方案是来自 Jesse 的解决方案。但是soon 我们应该有支持 pip 同步的 pip 工具来很好地处理这个问题
【解决方案2】:

现在有一种更简单的清除 pip 缓存的方法。只需更改运行时环境,例如从“python-2.7.3”更改为“python-2.7.2”,反之亦然。

为此,将一个名为 runtime.txt 的文件添加到存储库的根目录中,其中仅包含运行时字符串(如上所示)。

为此,您需要打开 Heroku 实验室的 user-env-compile 功能。见https://devcenter.heroku.com/articles/labs-user-env-compile

【讨论】:

  • 我已经验证这暂时确实有效——谢谢!
  • 更改运行时有效。 buildpack 方法不再适用于我。
【解决方案3】:

默认情况下 virtualenv 在部署之间缓存。

为了避免缓存你可以运行的包:

heroku config:add BUILDPACK_URL=git@github.com:heroku/heroku-buildpack-python.git#purge

这样,在您推送一些更改后,一切都将从头开始构建。要启用缓存,只需删除 BUILDPACK_URL 配置变量。

现在要卸载特定的软件包:

  1. requirements.txt中删除相应的记录;
  2. 提交并推送更改。

感谢 Heroku 支持团队的 Lincoln 的澄清。

【讨论】:

  • 这种方法似乎对我不起作用。它还在为其他人工作吗?
  • 这个网址对我不起作用。 'Maxime R' 答案中的 url 已经工作了
【解决方案4】:

我为 Maxime 和 Jesse 的答案创建了一些 fabfile 配方,允许使用一个 fab 命令重新安装要求:https://gist.github.com/littlepea/5096814(查看文档字符串以获取解释和示例)。

对于 Maxime 的回答,我创建了一个任务“heroku_clean”(或“hc”),它看起来像这样:

fab heroku_clean

或者使用别名并指定 Heroku 应用:

fab hc:app=myapp

对于 Jesse 的回答,我创建了一个任务“heroku_runtime”(或“hr”),它设置 heroku python 运行时并提交 runtime.txt(如果它不存在,也会创建它):

fab heroku_runtime:2.7.2

如果运行时版本未通过,它只会在 2.7.2 和 2.7.3 之间切换,因此更改和提交运行时的最简单方法是:

fab hr

然后您可以部署(推送到 heroku 源)您的应用程序,并且将重建 virtualenv。我还添加了一个“heroku_deploy”任务(“hr”),用于 heroku 推送和扩展,它也可以与“heroku_runtime”任务一起作为用户使用。这是我部署和重建 virtualenv 的首选方法 - 一切都发生在一个命令中,我可以选择何时重建它,我不喜欢像 Maxime 的回答建议的那样每次都这样做,因为它可能需要很长时间:

fab hd:runtime=yes

这相当于:

fab heroku_runtime
fab heroku_deploy

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-12-08
    • 1970-01-01
    • 2011-12-31
    • 2012-07-10
    • 2014-12-16
    • 1970-01-01
    • 2012-04-02
    • 1970-01-01
    相关资源
    最近更新 更多