为什么屏幕上有多个virtualenv?

时间:2014-02-27 02:15:10

标签: python unix virtualenv

当我登录我的服务器时,virtualenv会自动转到X.

(X)[andrew@hyperion ~]$ 

但是当我使用screen时,它会变为

(X)(X)[andrew@hyperion ~]$

如果我然后尝试更改虚拟环境(即source Y/bin/activate),我会

(Y)(X)[andrew@hyperion ~]$

一旦我

,我尝试deactivate
(X)[andrew@hyperion ~]$

但第二次,我收到了一个错误。如果我然后尝试将虚拟环境更改为Y,那么它就会回到(Y)(X)

这里发生了什么?

1 个答案:

答案 0 :(得分:1)

远程登录时,bash(或shell)执行source $HOME/virtualenvs/X/bin/activate并修改PS1(shell提示符)以添加(X)前缀。

当您启动屏幕时,会创建一个新的shell,然后执行source $HOME/virtualenvs/X/bin/activate,但由于某种原因,现有的virtualenv在屏幕内不可用,因此它会创建一个新的virtualenv和前缀PS1它的名称(也是(X)),但此时PS1已经有(X)前缀,所以你看到双(X)(X)。

当您手动source Y/bin/activate时,现有的virtualenv会从屏幕内的X切换到Y.因此,提示会更改为(Y)(X)...

当你deactivate时,你跳出Y virutalenv,但随后的deactivate命令失败,因为初始X virtualenv在屏幕外壳之外。

如果您退出屏幕并deactivate,您将跳出最初的X virtualenv。