如何显示当前Virtualenv的名称?


19

我使用virtualenvvirtualenvwrapperzshoh-my-zsh,终止,在Crunchbang。

我试图virtualenv像这样显示当前的名称

workon example
(example)... 

我已经尝试了许多解决方案,但似乎都行不通,这是我的.zshrc文件,我知道对其进行修复没什么大不了的,但是我找不到合适的解决方案。自从我上次使用Linux进行Django开发以来已经有很长时间了,但我忘记了以前的工作。

现在,我知道了username@crunchbang,我无法确定我正在使用哪个virtualenv。


我相信您在问如何设置提示,以便它显示您所在的virtualenv,对吗?
slm

@slm是的
Lynob

Answers:


10

壳牌的提示

您的virtualenv环境中有一个文件bin/activate。您可以编辑此文件以将提示符更改为所需的外观。特别是文件的这一部分:

...
else
    PS1="(`basename \"$VIRTUAL_ENV\"`)$PS1"
fi
...

该变量PS1是一个特殊的变量,用于控制shell的提示符。更改其值将更改您的virtualenv提示:

PS1="(this is my prompt) "

  1. 创建一个示例环境。

    $ virtualenv tst-env
  2. 使用时virtualenv,通常会获取此文件。

    $ cd $HOME/tst-env
    
    $ source bin/activate
    (tst-env)[saml@grinchy tst-env]$ 
  3. PS1bin/activate文件中的变量进行以上更改后,我的提示是:

    $ source bin/activate
    (tst-env)

这是有关如何执行此操作的官方说明


现在尝试了,没有解决
Lynob 2013年

这是我的激活文件pastebin.com/tZqdr1Yz
Lynob 2013年

activate文件时会发生什么?您的档案对我来说很好。
slm

我看不到任何输出,所以我不知道会发生什么,virtualenv除了我什么都没看见之外,它还在工作,也许是.zshrc问题所在virtualenvwrapper?可以调试此问题吗?请注意,我有2个virualenv可执行文件,是正常的virtualenvvirtualenv-2.7这是正常的还是virtualenv下载了两次?这就是我如何安装在外壳的virtualenv和virualenvwrapper它的事项sudo pip install virtualenv
Lynob

@Fischer-我只是使用仔细检查了它zsh,它也可以使用,因此很可能是一个环境。问题。现在暂时忽略2个virtualenv的设置。要调试,您可以set -x在外壳中启用它,然后再次运行该source activate命令。您应该看到PS1=设置提示的行。
slm

3

如果您正在使用,virtualenvwrapper并且目录zsh中有许多zsh挂钩,~/.virtualenvs/可用于自定义环境。这里是有关这些的一些信息。您可以通过添加以下内容来强制进行更新PS1:将当前更新置于virtualenv外壳程序提示符之前

_OLD_VIRTUAL_PS1=$PS1
PS1="(`basename \"$VIRTUAL_ENV\"`) $PS1"
builtin \export PS1

~/.virtualenvs/postactivate。要在删除标签时deactivate,添加:

PS1=$_OLD_VIRTUAL_PS1
builtin export PS1

~/.virtualenvs/postdeactivate

唯一可以打破这一点的东西(合理的)是~/.zshrcvirtualenv


我相信您的postdeactivate脚本有误。它应显示为PS1 = $ _ OLD_VIRTUAL_PS1内置\ export PS1
Greg Hilston,

默认情况下,virtualenvwrapper现在已经执行此操作。在由virtualenvwrapper创建的venv中,bin / activate脚本包含将venv名称预先添加到zsh和bash提示的代码!
埃里克·韦斯特鲁普

2

您无需修改~/.zshrc

由于您正在使用,virtualenvwrapper因此可以向$WORKON_HOME/post(de)activate文件添加选项或挂钩。

如果您想查看更多详细信息,请在此处咨询。

上面的链接允许我执行下一步:

就我而言,$WORKON_HOME=~/Envs因为我在安装virtualenvwrapper时修改了此路径;如果没有,则应该有该文件夹~/.virtualenvs

  1. 打开postactivate位于的文件$WORKON_HOME

  2. 添加这些行:

    PS1="$_OLD_VIRTUAL_PS1"
    _OLD_RPROMPT="$RPROMPT"
    RPROMPT="%{${fg_bold[white]}%}(env: %{${fg[green]}%}`basename \"$VIRTUAL_ENV\"`%{${fg_bold[white]}%})%{${reset_color}%} $RPROMPT"
  3. 保存并享受!

    您将获得如下内容: 完成

  4. (可选)如果需要,您可以编辑postdeactivate文件以添加以下行:

    RPROMPT="$_OLD_RPROMPT"

这似乎是从官方文档中
汤姆·黑尔

0

我只是在ubuntu 14.04上进行了测试,但我遇到了同样的问题。要修复它,请将其添加到您的.zshrc中

source /usr/share/virtualenvwrapper/virtualenvwrapper.sh

或在终端中运行

echo source /usr/share/virtualenvwrapper/virtualenvwrapper.sh >> ~/.zshrc

在Mac OS XI中必须要做

echo source /usr/local/bin/virtualenvwrapper.sh >> ~/.zshrc

0

如果知道正在使用的主题,则可以添加一个函数来检索激活的VIRTUAL_ENV基本名称,并将其用于〜/ .oh-my-zsh / themes /中* .zsh-theme文件中的PROMPT变量中。那应该可以解决问题!

对我来说,这是默认的“ oh-my-zsh”主题,即配置的“ robbyrussels”

function virtualenv_info {
    [ $VIRTUAL_ENV ] && echo '('`basename $VIRTUAL_ENV`') '
}

local ret_status="%(?:%{$fg_bold[green]%}➜ :%{$fg_bold[red]%}➜ )"
PROMPT='${ret_status} $(virtualenv_info) %{$fg[cyan]%}%c%{$reset_color%} $(git_prompt_info)'

添加上面的代码会产生以下结果:

在此处输入图片说明

(kunkka.com)是我刚刚停用的virtualenv。

编辑主题文件后,不要忘记源.zshrc文件。

-> source ~/.zshrc
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.