Python 在当前shell中停用pyenv

Python 在当前shell中停用pyenv,python,pyenv,Python,Pyenv,My.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。在某些情

My.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。如何执行此操作?

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


这里的文档:

试着玩一下以下的一些变体:

env-i bash

env-i bash-l

env-ibash--norc

env-ibash--norc--noprofile


这并不是没有副作用,因为
env-i
会影响你的整个疗程,因此之后很多便利的东西,比如
$HOME
都随洗澡水一起消失了,但是
pyenv

除了下面的答案外,没有一个对我有用:

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

我不确定这是否会消除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
,以便以后可以还原它。

如果希望从系统中使用python版本:

pyenv local system

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

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

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

此bash函数删除pyenv路径并取消设置环境变量。(我刚刚扩展了shivams
sed
命令,它可能无法在BSD系统上工作。)


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

pyenv shell——取消设置

定义“临时”。你想为bash会话禁用pyenv吗?@Marcs:是的,确实如此,因为它与一个好的旧虚拟机冲突。vi只需像这样注释掉
#启用pyenv
,然后打开一个新的bash会话。如果可以为您打开一个新的bash会话,请记住。bashrc在bash初始化时是只读的。@Marcs:我甚至不确定这是否适用于我的情况,因为我在tmux会话中打开shell,而tmux会话是在已经启用pyenv的bash会话中运行的,所以tmux中的任何shell都很可能启用了pyenv,即使我编辑了.bashrc。我可以打开一个全新的终端,但由于这会不止一次地困扰我,我希望有一种方法可以在我当前的shell中完全禁用(并重新启用)pyenv。我检查了一点,为了直接在shell中执行您想要的操作,您应该反转pyenv init-shell函数,它改变了很多东西,看起来像是通过pydev管道传输命令。尝试在shell中启动
pyenv init-
,您将看到与bash相关的shell代码。因此,我将创建一个带有reverse函数的脚本,以便在您想要关闭pydev时调用它。从理论上讲,我不知道pydev是如何工作的。对不起,我不够清楚:我想完全禁用
pyenv
(对于bash会话),因为它与正常的virtualenv冲突(在pyenv的控制之外)。我不想禁用pyenv控制的特定virtualenv环境,但要使用另一个自定义命令完全禁用pyenv(用于bash会话)。bashrc可能是一个解决方案。当然,移动到另一台计算机:)但必须有一种方法在当前shell会话中禁用pyenv?只需
cp
您的
。bachrc
到,即
。bashrc\u clean
然后
源代码。bashrc\u clean
,在您想要的会话上就足够了:)不,当前shell已经启用了pyenv,注释和资源分配不会禁用它。您可能需要
pyenv shell系统
,否则您将只影响当前目录(或以下目录)中的shell。这不起作用,它只会删除提示,它仍然指向同一个垫片,您还需要将其从路径中删除并取消设置所有pyenv_*env变量
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@}"

}