如何在heroku雪松堆栈上使用virtualenv进行卸载?

时间:2012-01-20 07:08:20

标签: python heroku virtualenv pip

我尝试使用以下方法卸载heroku上的模块:

heroku运行bin / python bin / pip卸载

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

有没有办法让pip uinstall成功?


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

4 个答案:

答案 0 :(得分:32)

更新了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月〜2012年是最新的(我之前没有更新链接的buildpack,我的拉取请求已关闭,并且官方buildpack在某些时候删除了CLEAN_VIRTUALENV功能) :

正如大卫解释的那样,你无法卸载卸载一个软件包,但你可以清除并重新安装整个virtualenv。使用user-env-compile实验室功能和CLEAN_VIRTUALENV option清除virtualenv:

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

目前这不起作用,因为有一个错误。在my fork(拉取请求已关闭)之前,您需要使用buildpack的get fixed upstream

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

现在推送你的新代码,你会注意到整个virtualenv重新安装。

安德烈的答案自2012年3月23日起不再适用。new style virtualenv提交将虚拟环境从/ app移至/app/.heroku/venv但清除分支未更新以赶上以便您结束一个不属于PYTHONHOME的虚拟人物。

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

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

答案 1 :(得分:22)

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

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

要实现这一点,您需要打开Heroku labs用户环境编译功能。见https://devcenter.heroku.com/articles/labs-user-env-compile

答案 2 :(得分:10)

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

为避免缓存软件包,您可以运行:

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

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

现在卸载特定的软件包:

  1. requirements.txt;
  2. 中删除相应的记录
  3. 提交并推送更改。
  4. 感谢Heroku支持团队的林肯澄清。

答案 3 :(得分:0)

我为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 origin)你的应用程序,virtualenv将被重建。我还添加了一个'heroku_deploy'任务('hr'),用于heroku push和scale,也可以与'heroku_runtime'任务一起使用。这是我首选的部署和重建virtualenv的方法 - 一切都在一个命令中发生,我可以选择何时重建它,我不喜欢每次都像Maxime的回答那样做,因为它可能需要很长时间:

fab hd:runtime=yes

这相当于:

fab heroku_runtime
fab heroku_deploy