virtualenv名称不在zsh提示符中显示

时间:2016-08-13 02:48:27

标签: bash zsh oh-my-zsh

最近,我试试哦,我的zsh,一切看起来都不错,直到我尝试virtualevn和virtualenvwrapper。当我激活virtualenv(例如测试)时,在正常的bash上,我会看到virtualenv名称,如:


+-------+-------+
| value | count |
+-------+-------+
|    22 |     5 | # all entities with value 22 happen to have 23 as well 
|    23 |     2 |   that is, one is a subset of the other
|    42 |     2 | # intersection is nonempty
|    54 |     5 | # sets are disjoint 
+-------+-------+

但是当我切换到zsh时,我看不到virtualenv的名字。尽管如此,我还是在我的zsh的插件中添加了virtualenv和virtualenvwrapper。我还检查了virtualenv的激活文件,它包含:

(test)abc@abc:

是因为比较[" x" != x]返回true?

更新 我试图在激活文件中回显$ PS1,并得到了这个:

f [ -z "${VIRTUAL_ENV_DISABLE_PROMPT-}" ] ; then        
    _OLD_VIRTUAL_PS1="$PS1"
    if [ "x" != x ] ; then
        PS1="$PS1"
    else
        PS1="(`basename \"$VIRTUAL_ENV\"`) $PS1"
    fi
        export PS1
fi

似乎$ PS1是正确的,但当我在终端回应$ PS1时,(测试)消失了。似乎$ PS1被其他东西覆盖了!

10 个答案:

答案 0 :(得分:24)

~/.zshrc中执行此操作:

plugins=(virtualenv)

POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS=(status virtualenv)

注意事项:

1 - 除了您拥有的其他插件外,还添加该插件。

2 - 我正在使用POWERLEVEL9K主题。也许你主题

答案 1 :(得分:17)

最好的解决方案是将以下内容添加到〜/ .zshrc文件的末尾:

export VIRTUAL_ENV_DISABLE_PROMPT=

这将覆盖virtualenv.plugin.zsh中的值 - 无需更改该文件。

答案 2 :(得分:12)

发现问题,这是由于主题。我在上面的例子中使用的主题是pygmalion,它不允许你更改$ PS1。

更改为robbyrussell主题后,我可以在终端更改$ PS1,但仍然看不到virtualenv名称。经过一段时间的调试,我发现默认情况下我的zsh的virtualenv插件禁用了提示:

# disables prompt mangling in virtual_env/bin/activate
export VIRTUAL_ENV_DISABLE_PROMPT=1

所以只需在virtualenv插件中注释掉这一行,问题就解决了。

答案 3 :(得分:1)

根据本指南here

  • 首先在文件virtualenv的{​​{1}}下添加plugin依赖项 如果这对您不起作用,则表示您选择的主题(oh-my-zsh主题之一)在bash提示符中不包含virtualenv名称,请尝试第二步。

  • 转到文件.zshrc并在基本提示中添加此项 ~/.oh-my-zsh/themes/YOUR_THEME_NAME.zsh-theme

注意 %{$fg[green]%}$(virtualenv_prompt_info)%{$reset_color%}% virtualenv_prompt_info中声明的函数名称。如果您的插件文件具有不同的函数名称,则相应地进行更改。

或者您可以在~/.oh-my-zsh/plugins/virtualenv/virtualenv.plugin.zsh文件中声明自己的功能,如guide

所示

答案 4 :(得分:1)

如果您使用conda启动虚拟环境,则envorionment变量将有所不同。要找出包含virtaulenv名称类型printenv的环境的名称,并查看输出。对我而言,CONDA_PROMPT_MODIFIER

知道变量的名称后打开.zshrc并添加此函数

function virtualenv_info { [ $CONDA_PROMPT_MODIFIER ] && echo `basename $CONDA_PROMPT_MODIFIER` }

及以下添加此行

PROMPT="%{$fg[green]%}$(virtualenv_info)%{$reset_color%}%${PROMPT}"

关闭编辑器并输入source .zshrc

答案 5 :(得分:0)

我通过以下链接使其有效:https://askubuntu.com/a/387098

我在下面复制答案。

如何更改提示在虚拟环境目录内的脚本bin/activate中定义。该文件由virtualenv通过模板创建。不幸的是,模板提供的快速修改的唯一方法是在(env name)之前加上--prompt设置的任何内容。

要以所需的方式修改提示,建议您绕过bin/activate中提示的设置,并修改主题文件中PROMPT的定义。

首先将以下内容添加到您的.zsh-theme(或.zshrc

export VIRTUAL_ENV_DISABLE_PROMPT=yes

function virtenv_indicator {
    if [[ -z $VIRTUAL_ENV ]] then
        psvar[1]=''
    else
        psvar[1]=${VIRTUAL_ENV##*/}
    fi
}

add-zsh-hook precmd virtenv_indicator

,然后在%(1V.(%1v).)定义的第二行之前添加PROMPT。然后看起来应该像这样:

PROMPT='
%(1V.(%1v).)%{$fg_bold[grey]%}[%{$reset_color%}%{$fg_bold[${host_color}]%}%n@%m%{$reset_color%}%{$fg_bold[grey]%}]%{$reset_color%} %{$fg_bold[blue]%}%10c%{$reset_color%} $(git_prompt_info) $(git_remote_status)
%{$fg_bold[cyan]%}❯%{$reset_color%} '

如果您想要一些颜色,则可以添加%(1V.%{$fs_bold[yellow]%}(%1v)%{$reset_color%}.)

说明

每次创建提示前都会调用

virtenv_indicator。它检查$VIRTUAL_ENV是否已设置并且不为空。如果是这样,它会将$psvar数组的第一个元素设置为$VIRTUAL_ENV,并删除和删除最后一个/之前的所有内容(例如basename $VIRTUAL_ENV,但价格便宜)

PROMPT的定义中,%(1V.(%1v).)检查$psvar的第一个元素是否已设置并且不为空(%(1V.true-text.false-text)),并添加this元素的内容以及一些内容括号((%1v)

export VIRTUAL_ENV_DISABLE_PROMPT=yes通过bin/activate脚本禁用任何提示设置。

答案 6 :(得分:0)

我的显示Python virtualenv名称的设置如下。

implementation project(":Common", include: ['libApp1.so']) 文件中:

1- .zshrc已添加到virtualenv

2- plugins的功能已添加

zsh

立即导航至主题

3-我的主题是function virtualenv_info { [ $VIRTUAL_ENV ] && echo ‘(‘`basename $VIRTUAL_ENV`’) ‘ } 的默认主题。

zsh

4-在现有的PROMPT命令之后立即添加此命令:

`$ vim ~/.oh-my-zsh/themes/robbyrussell.zsh-theme`

最终

PROMPT+='%{$fg[green]%}$(virtualenv_prompt_info)%{$reset_color%}%'

PS:您可以在PROMPT +之前或之后添加您的名字或一些空格

希望有帮助!

答案 7 :(得分:0)

如果您使用Homebrew安装了Anaconda:

brew tap homebrew/cask-versions 
brew cask install anaconda 

您正在使用POWERLEVEL9K主题

git clone https://github.com/bhilburn/powerlevel9k.git ~/.oh-my-zsh/custom/themes/powerlevel9k

您需要做的就是将此行添加到.zshrc的末尾:

POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS=(status root_indicator background_jobs history time anaconda)

不需要virtualenv插件。

编辑:

如果您已经为bash安装了conda并得到:

zsh: command not found: conda

运行此:

~/anaconda3/bin/conda init zsh

答案 8 :(得分:0)

我正在使用oh-my-zsh pygmalion,这对我有用:

  • 在〜/ .zshrc中添加virtualenv插件

  • 打开〜/ .oh-my-zsh / themes / pygmalion.zsh-theme,将prompt_pygmalion_precmd函数修改为此:

     prompt_pygmalion_precmd(){
       setopt localoptions extendedglob
    
       local gitinfo=$(git_prompt_info)
       local gitinfo_nocolor=${gitinfo//\%\{[^\}]##\}}
       local exp_nocolor="$(print -P \"$base_prompt_nocolor$gitinfo_nocolor$post_prompt_nocolor\")"
       local prompt_length=${#exp_nocolor}
       local python_venv=$(virtualenv_prompt_info)
    
       PROMPT="${python_venv}${base_prompt}${gitinfo}${post_prompt}"
     }
    

基本上,只要将$(virtualenv_prompt_info)添加到您的PROMPT到您喜欢的任何位置,这里我都将其添加到PROMPT的开头。

答案 9 :(得分:-1)

如果你使用 zsh 和 pyenv,把它放到 ~/.zshrc

eval "$(pyenv init -)"
eval "$(pyenv virtualenv-init -)"
#export PS1='($(pyenv version-name)) '$PS1

export PYENV_VIRTUALENV_DISABLE_PROMPT=1
export BASE_PROMPT=$PS1
function updatePrompt {
    if [[ "$(pyenv version-name)" != "system" ]]; then
        # the next line should be double quote; single quote would not work for me
        export PS1="($(pyenv version-name)) "$BASE_PROMPT
    else
        export PS1=$BASE_PROMPT
    fi
}
export PROMPT_COMMAND='updatePrompt'
precmd() { eval '$PROMPT_COMMAND' } # this line is necessary for zsh