源码/激活不更新提示:我的虚拟环境真的处于活动状态吗?如果不是,如何解决这个问题?



我第一次尝试运行virtualenv,当我运行以下代码时,shell提示符没有改变。

$ virtualenv test
New python executable in test/bin/python
Installing setuptools............done.
$ source test/bin/activate
$

我假设它没有激活我的环境,因为没有(test)$提示。virtualenv命令正确创建目录,因此激活文件在那里,只是似乎不起作用?

我也尝试过这个命令,它给出了相同的结果。

$ . test/bin/activate
$

我的虚拟环境是否正在运行,我只是看不到提示(我可以运行一些东西来检查)?

我的虚拟环境是否只是没有运行,我没有正确激活它?

我正在使用Python 3.6.0(从Homebrew安装),virtualenv 15.1.0,Mac OS X 10.11.6和zsh(oh-my-zsh)

要判断您的 virtualenv 是否处于活动状态而不依赖于提示(哪个 shell 配置可以持久覆盖),请使用:

declare -p VIRTUAL_ENV

如果输出为:

declare: no such variable: VIRTUAL_ENV

。那么你的虚拟环境真的不活跃了。相比之下,如果输出为:

typeset -x VIRTUAL_ENV=/Users/jess/test

。然后它处于活动状态,但您的提示已被覆盖。


要在 zsh 中诊断此问题(激活失败或提示覆盖不粘),请使用:

PS4=':%x:%I+'  # the equivalent to this in bash would be PS4=':$BASH_SOURCE:$LINENO+'
set -x
source test/bin/activate

。它将打印源文件、行号和在activate脚本源期间和之后执行的所有操作;这应该包括更新 PS1 的激活脚本(或者,可能出于某种原因决定不执行);并且可能包括一个函数钩子,将您的 PS1 更改回没有更新提示以显示 virtualenv 状态的版本。

感谢查尔斯的帮助,我发现是我的oh-my-zsh主题(powerlevel9k)没有显示提示。我只需要在这里描述的~/.zshrc中添加virtualenvPython 段。

如果您在 iterm 上使用 oh-my-zsh 并想提示虚拟环境,那么,open ~/.zshrc像这样在该文件中添加/更新 virtualenvPOWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(context time battery dir vcs virtualenv custom_wifi_signal)然后最后不要忘记source ~/.zshrc

相关内容

最新更新