我尝试使用以下方法卸载heroku上的模块:
heroku运行bin / python bin / pip卸载
Pip显示/ app树中的模块然后声称已安装该模块,但再次运行相同的命令会显示它安装在/ app树中的相同位置。
有没有办法让pip uinstall成功?
Heroku run实例化一个新的dyno并仅运行该dyno中指定的命令。 Dynos是短暂的,这就是为什么pip卸载的结果不坚持。
答案 0 :(得分:32)
更新了2013-09-30:当前清除virtualenv的方法似乎在runtime.txt
as stated on Github和Heroku'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配置变量。
现在卸载特定的软件包:
requirements.txt
; 感谢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