我尝试使用以下命令在Heroku上卸载一个模块:
heroku run bin/python bin/pip uninstall whatever
Pip在/app目录树中显示该模块,然后声称已卸载该模块,但再次运行相同的命令会在相同位置的/app目录树中显示其已安装。
是否有一种方法可以使pip卸载成功?
Heroku运行命令仅在新的dyno中运行指定的命令。Dynos是短暂的,这就是为什么pip卸载结果不会被保留。
我尝试使用以下命令在Heroku上卸载一个模块:
heroku run bin/python bin/pip uninstall whatever
Pip在/app目录树中显示该模块,然后声称已卸载该模块,但再次运行相同的命令会在相同位置的/app目录树中显示其已安装。
是否有一种方法可以使pip卸载成功?
Heroku运行命令仅在新的dyno中运行指定的命令。Dynos是短暂的,这就是为什么pip卸载结果不会被保留。
runtime.txt
中指定不同的Python运行时版本如Github所述并在Heroku的devcenter参考中指定。http://envy-versions.s3.amazonaws.com/$PYTHON_VERSION.tar.bz2
中找到,尽管在大多数情况下,在2.7.4和2.7.3之间切换不应该成为问题)。感谢@Jesse提供最新的答案以及让我意识到这个问题的评论者们。
heroku labs:enable user-env-compile
heroku config:add CLEAN_VIRTUALENV=true
目前这个无法工作,因为存在一个错误。在此get fixed upstream(拉取请求已关闭)之前,您需要使用 my fork 的构建包:
heroku config:add BUILDPACK_URL=https://github.com/blaze33/heroku-buildpack-python.git
heroku labs:disable user-env-compile
heroku config:remove CLEAN_VIRTUALENV BUILDPACK_URL
heroku config:add CLEAN_VIRTUALENV=true
。 - alanjds默认情况下,virtualenv 在部署之间被缓存。
为了避免包的缓存,您可以运行:
heroku config:add BUILDPACK_URL=git@github.com:heroku/heroku-buildpack-python.git#purge
这样,只要你推送了一些更改,所有东西都将从头开始构建。要启用缓存,只需删除BUILDPACK_URL配置变量即可。
现在卸载特定的软件包:
requirements.txt
中删除相应的记录;感谢Heroku支持团队的Lincoln进行澄清。
我为Maxime和Jesse的答案创建了一些fabfile配方,允许使用一个fab命令重新安装要求:https://gist.github.com/littlepea/5096814(查看docstrings以获取说明和示例)。
对于Maxime的答案,我创建了一个任务'heroku_clean'(或'hc'),它将类似于以下内容:
fab heroku_clean
或者使用别名并指定一个 Heroku 应用:
fab hc:app=myapp
fab heroku_runtime:2.7.2
fab hr
然后,您只需要部署(推送到Heroku源)应用程序,虚拟环境就会重新构建。我还添加了一个“heroku_deploy”任务(“hr”),用于Heroku推送和缩放,也可以与“heroku_runtime”任务一起使用。这是我首选的部署和重建虚拟环境的方法-一切都在一个命令中完成,我可以选择何时重建它,不像Maxime的答案建议那样每次都这样做,因为这可能需要很长时间:
fab hd:runtime=yes
这是一个等价于:
fab heroku_runtime
fab heroku_deploy