Python virtualenvwrapper:'workon' 无法结束
标题基本上已经说明了问题。我尝试使用 workon $SOME_VIRTUALENV
命令时,它会回显这个命令,然后在高 CPU 使用率(大约 70%)的情况下无限期挂起,直到我用 kill -9
强制结束它。我的操作系统是 OS X Mavericks。
我查了一下,发现大多数类似的问题都是那些使用 zsh 的人遇到的(而我不是),而且他们在输入虚拟环境名称时会崩溃(我也没有这个问题),所以我有点无从下手。我知道信息不多,但我也不是 bash 专家,如果能给我一些获取真实诊断信息的建议,我会非常感激。
$ echo $OSTYPE
darwin13.1.0
$ echo $SHELL
usr/local/bin/bash
$ echo $BASH_VERSION
4.0.0(1)-release
$ which python
/usr/local/bin/python
$ python --version
Python 2.7.8
$ pip show virtualenv
---
Name: virtualenv
Version: 1.11.6
Location: /usr/local/lib/python2.7/site-packages
Requires:
$ pip show virtualenvwrapper
---
Name: virtualenvwrapper
Version: 4.3.1
Location: /usr/local/lib/python2.7/site-packages
Requires: virtualenv, virtualenv-clone, stevedore
.bashrc 文件(大致是从某个地方复制粘贴过来的):
# Locate virtualenvwrapper binary
if [ -f /usr/local/bin/virtualenvwrapper.sh ]; then
export VENVWRAP=/usr/local/bin/virtualenvwrapper.sh
fi
if [ ! -z $VENVWRAP ]; then
# virtualenvwrapper -------------------------------------------
# make sure env directory exists; else create it
[ -d $HOME/sites/env ] || mkdir -p $HOME/sites/env
export WORKON_HOME=$HOME/sites/env
source $VENVWRAP
# virtualenv --------------------------------------------------
export VIRTUALENV_USE_DISTRIBUTE=true
# pip ---------------------------------------------------------
export PIP_VIRTUALENV_BASE=$WORKON_HOME
export PIP_REQUIRE_VIRTUALENV=false
export PIP_RESPECT_VIRTUALENV=true
export PIP_DOWNLOAD_CACHE=$HOME/.pip/cache
fi
2 个回答
如果你不确定自己在bashrc文件里放了什么,就不要放进去。可能是路径设置得不对,这才导致一切都卡住了。
可以尝试把里面的内容注释掉。
按照这里的步骤操作:http://virtualenvwrapper.readthedocs.org/en/latest/install.html,或者运行这个命令:locate virtualenvwrapper.sh
你得到的路径是你需要的。接着编辑你的.bashrc文件,添加以下内容:
source /你之前得到的路径/virtualenvwrapper.sh
修改后保存并关闭文件,然后执行:
source .bashrc
(可能你还需要配置一下WORKON_HOME,我记不太清楚了)看看有没有什么变化。
如果没有变化,试着创建一个新的虚拟环境。
为了将来能帮助到其他人,我来分享一下我的经历:
我最终找到了这个问题的根源,虽然不知道具体原因。是虚拟环境管理工具virtualenvwrapper的自定义补全功能出了大问题;每当我尝试用Tab键补全workon
命令时,接下来输入的命令就会出现之前提到的问题。即使我按下Ctrl-C取消了补全的命令,重新输入一个全新的命令,问题依然存在。
所以,我决定不再使用workon
的补全功能,并且把virtualenvwrapper.sh
文件中virtualenvwrapper_setup_tab_completion
这个函数的内容删掉,换成一个什么都不做的true
,这样就不会不小心使用补全了。
我本可以更深入地研究一下为什么补全会导致这个问题,但现在觉得没必要。还有一些其他人也遇到过virtualenvwrapper的补全问题,我看到的情况是他们在尝试使用时,终端直接崩溃了,而我这里并没有发生这种情况。