与 virtualenv / 主要答案:

与 virtualenv / 主要答案:

我在 Crunchbang 上使用virtualenvvirtualenvwrapperzshoh-my-zsh、 terminator。

virtualenv我正在尝试像这样显示当前的名称

workon example
(example)... 

我尝试了很多解决方案似乎都不起作用这是我的 .zshrc文件,我知道修复它没什么大不了的,但我找不到正确的解决方案。距离上次使用Linux进行Django开发已经有很长一段时间了,我都忘了以前是做什么的了。

现在,我明白了username@crunchbang,我不知道我正在使用哪个 virtualenv。

答案1

shell的提示符

您的环境中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. PS1对文件中的变量进行上述更改后,bin/activate我的提示现在是这样的:

    $ source bin/activate
    (tst-env)
    

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

答案2

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

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

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

PS1=$_OLD_VIRTUAL_PS1
builtin export PS1

~/.virtualenvs/postdeactivate

唯一(看似合理的)应该打破这一点的是~/.zshrc在工作时的资源配置virtualenv

答案3

您不必编辑您的~/.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"
    

答案4

[虽然这个答案可以说有点偏离了回答所问的问题(尽管我也尝试至少部分地这样做),但在寻找我知道存在的答案venv(而不是virtualenv)时,我找到了解决这个问题的方法,我不记得确切的细节(即--prompt两个命令都支持的选项)。我怀疑我不会是第一个,所以就这样吧。]


与 virtualenv / 主要答案:

首先,你的核心问题的基本答案是你不应该需要做任何事情来获得迅速的改变,除了创建一个环境,运行它的activate源文件(workon应该有效地为你做),并且遵循安装文档(更多下面) - 例如摘自virtualenv 文档:

$ workon
$ mkvirtualenv mynewenv
New python executable in mynewenv/bin/python
Installing setuptools.............................................
..................................................................
..................................................................
done.
(mynewenv)$

这种行为正是我所期望的workon example,就像您在上面的问题文本中所做的那样(除非您随后会得到提示(example)$而不是(mynewenv)$)。

如果您没有明白这一点,我会确保您遵循所有正确的设置步骤virtualenv。您相对不太可能需要更改您的任何内容.zshrc [旁注:您的链接现已失效]— 除非按照原文安装说明,建议添加以下内容(或延迟加载替代方案,也列在那里):

export WORKON_HOME=$HOME/.virtualenvs
export PROJECT_HOME=$HOME/Devel
source /usr/local/bin/virtualenvwrapper.sh

并且不应该有任何其他内容......除非您希望名称显示在提示符或其他内容中的不同位置(在这种情况下,您可能会找到一些答案这个问题有用)。

也就是说,还存在一个简单地命名环境的问题,这可以通过命名存储环境的文件夹来完成,例如:

virtualenv example

或者通过在使用不同名称创建环境时指定提示,例如:

virtualenv env --prompt example

(后者将在名为 的目录中创建文件./env,但激活它时的提示将以 开头(example)。)

与 venv:

在现代(当我写这篇文章时)Python 环境中,使用 Ships-with-Pythonvenv而不是(pip安装的)也是相当常见的virtualenv(尽管virtualenv仍然有拥护者和理由使用它 - 如果我理解正确的话,venv基本上是只是 的精简版本virtualenv,后者具有venv) 中未找到的附加功能和其他改进,并且与 一样venv,最后两个命令(上面)的等效项将是:

python3 -m venv example

... 或者...

python3 -m venv env --prompt example

... 分别。

我希望这对(对某人)有用!

相关内容