最近,我试试哦,我的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被其他东西覆盖了!
答案 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