Python虚拟环境包virtualenvwrapper:'workon' 无限挂起

3

标题基本上都说了。尝试使用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

1
如果您创建一个全新的虚拟环境:mkvirtualenv test -p /usr/local/bin/python,会发生什么?workon test 仍然会挂起吗? - unutbu
1
稍后,您可以使用以下命令删除名为 test 的虚拟环境:rmvirtualenv test - unutbu
2
此外,如果您运行 set -x,那么bash将显示所有正在执行的命令。这可能有助于定位 workon XYZ 卡住的位置。稍后,您可以使用 set +x 关闭详细模式。 - unutbu
一个新的虚拟环境运行良好——显然应该尝试这个,抱歉。删除和重新创建我正在使用的那个,并将源文件夹复制回去也起作用了。然而,一旦我重新安装了项目要求,它又卡住了。 set -x 的唯一输出是`+ workon $blah + in_args=("$@")`有相当多的要求;猜想我得自己仔细检查一下,看看到底是出了什么问题。 - Mark Whitfield
考虑在 bitbucket 仓库 上开一个问题(issue)? - Ismail Badawi
尝试运行 bash -x /usr/local/bin/virtualenvwrapper.sh $SOME_VIRTUALENV 以查看它具体卡在哪里。 - jmunsch
2个回答

1

为了后人,对于任何搜索此问题的可怜人:

我最终找到了这个问题的罪魁祸首,尽管不知道原因。由virtualenvwrapper设置的自定义选项卡完成引起了某些重大问题;如果我尝试用workon命令进行选项卡完成,下一个输入的命令将导致上述问题。即使我Ctrl-C退出选项卡完成的命令并输入全新的命令,也会出现这种情况。

所以,我停止使用workon的选项卡完成,并删除virtualenvwrapper.shvirtualenvwrapper_setup_tab_completion函数的内容(替换为无操作的true),以确保我不会意外地使用它。

我可能可以深入挖掘并弄清楚为什么选项卡完成会导致问题,但现在这样做没有价值。我发现了几个其他人使用virtualenvwrapper的选项卡完成时遇到问题的例子,但在这些实例中,当他们尝试使用它时,终端会立即崩溃,而这里没有发生这种情况。


0

如果你不确定要在bashrc中放什么东西,就不要放。也许路径出了问题,导致一切都卡住了。

请尝试注释掉那里写的内容。

按照这里的步骤进行:http://virtualenvwrapper.readthedocs.org/en/latest/install.html 或者运行: locate virtualenvwrapper.sh

你得到的路径是你需要的。编辑你的.bashrc文件,并添加: source /你之前得到的路径/virtualenvwrapper.sh

更改后保存并关闭,然后执行: source .bashrc

(也许你还需要配置WORKON_HOME。我记不清了) 尝试看看是否有任何变化。

如果没有,尝试创建新的虚拟环境。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接