Python 在当前shell中停用pyenv
My.bashrc有以下功能: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。在某些情
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@}"
}