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

Dav*_*son 22 python pip heroku virtualenv

我尝试在heroku上卸载模块:

heroku运行bin/python bin/pip卸载什么

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

有没有办法让pip uinstall成功?


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

Max*_* R. 32

更新2013-09-30:清除virtualenv的当前方式似乎指定了一个不同的python运行时版本,runtime.txt 如GithubHeroku的devcenter参考中所述.

请注意,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提供最新的答案以及让我了解这个问题的评论者.


是在2012年11月的最新版本(我之前没有更新链接的buildpack,我的pull请求已关闭,并且官方buildpack在某些时候删除了CLEAN_VIRTUALENV功能):

正如大卫解释的那样,你不能pip卸载一个包,但你可以清除并重新安装整个virtualenv.使用带有CLEAN_VIRTUALENV选项user-env-compile实验室功能来清除virtualenv:

heroku labs:enable user-env-compile
heroku config:add CLEAN_VIRTUALENV=true
Run Code Online (Sandbox Code Playgroud)

目前这不起作用,因为有一个错误.您将需要使用的buildpack的fork,直到它在上游得到修复(pull请求已关闭):

heroku config:add BUILDPACK_URL=https://github.com/blaze33/heroku-buildpack-python.git
Run Code Online (Sandbox Code Playgroud)

现在推送你的新代码,你会发现整个virtualenv重新安装.

安德烈的答案自2012年3月23日起不再有效.新款virtualenv提交将虚拟环境从/ app移至/app/.heroku/venv,但清除分支未更新以赶上,以便最终得到一个虚拟实验室在PYTHONHOME.

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

heroku labs:disable user-env-compile
heroku config:remove CLEAN_VIRTUALENV BUILDPACK_URL
Run Code Online (Sandbox Code Playgroud)


小智 22

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

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

要实现这一点,您需要打开Heroku labs user-env-compile功能.请参阅https://devcenter.heroku.com/articles/labs-user-env-compile


小智 10

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

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

heroku config:add BUILDPACK_URL=git@github.com:heroku/heroku-buildpack-python.git#purge
Run Code Online (Sandbox Code Playgroud)

这样,在推动一些更改之后,所有内容都将从头开始构建.要启用缓存,只需删除BUILDPACK_URL配置变量.

现在卸载特定的包:

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

感谢来自Heroku支持团队的林肯的澄清.