在当前shell中停用pyenv

时间:2016-09-06 12:14:03

标签: python pyenv

我的.bashrc有这个:

enable-pyenv () {
    # Load pyenv automatically by adding
    # the following to your profile:

    export PATH="$HOME/.pyenv/bin:$PATH"
    eval "$(pyenv init -)"
    eval "$(pyenv virtualenv-init -)"
}

enable-pyenv

这使pyenv成为可能。在某些情况下,我想(暂时)禁用pyenv。我怎么能这样做?

8 个答案:

答案 0 :(得分:3)

我不确定这会消除pyenv的所有痕迹,但是编辑你的$PATH环境变量以摆脱包含pyenv或shim的路径似乎会停用pyenv。例如,

export PATH=`echo $PATH | python -c "import sys, re; print(':'.join(x for x in sys.stdin.read().strip().split(':') if not 'pyenv' in x))"`

如果您希望能够重新启用它,只需存储以前的$PATH,以便稍后恢复。

答案 1 :(得分:3)

答案 2 :(得分:2)

要从当前 shell 环境中停用,请尝试
pyenv shell --unset

答案 3 :(得分:0)

尝试使用以下的一些变体:

env -i bash

env -i bash -l

env -i bash --norc

env -i bash --norc --noprofile

这并非没有副作用,因为env -i会影响你的整个会话,因此像$HOME这样的许多便利已经消失了,但pyenv也是如此。

答案 4 :(得分:0)

所有发布的答案都没有对我有用,但以下情况确实如此:

$ echo "" > /home/myusername/.pyenv/version

答案 5 :(得分:0)

对我来说,最终有效的方法是从pyenv变量中删除所有$PATH路径的蛮力方法:

 PATH=`echo $PATH | tr ':' '\n' | sed '/pyenv/d' | tr '\n' ':' | sed -r 's/:$/\n/'`

我希望pyenv本身提供更好的方法。

答案 6 :(得分:0)

这个 bash 函数删除 pyenv 路径并取消设置环境变量。 (我刚刚扩展了 shivams sed 命令,它可能不适用于 BSD 系统。)

function deactivate-pyenv {

    # check that virtual environment is not currently active
    if [ ! -z ${PYENV_VIRTUAL_ENV+x} ]; then
        echo ""
        echo "Cannot proceed while virtual environment is active"
        echo ""
        return 1
    fi

     # remove pyenv paths
     export PATH=`echo $PATH | tr ':' '\n' | sed '/pyenv/d' | tr '\n' ':' | sed -r 's/:$/\n/'`        

    # unset pyenv environment variables
    unset "${!PYENV@}"

}

答案 7 :(得分:-1)

尝试pyenv deactivate,手动停用虚拟环境。

Doc在这里:https://github.com/yyuu/pyenv-virtualenv