【问题标题】:Activate a default virtualenv when starting a terminal (using bashrc)启动终端时激活默认 virtualenv(使用 bashrc)
【发布时间】:2013-06-26 18:39:06
【问题描述】:

我系统中的默认python版本是2.6.6。我安装了 virtualenv,我希望每次打开终端时默认的 virtualenv 为 2.7。

所以,我在 ~/.bashrc 文件中添加了以下命令:

source $HOME/virtualenvs/py2.7/bin/activate

现在,每当我通过在 Gnome 环境中单击图标启动终端(即,我已经登录机器并在 Gnome 中打开一个新的终端窗口 (xterm))时,shell 符号如下所示:

    (py2.7)(py2.7)

看起来好像我在另一个 virtualenv 中有一个 virtualenv。更糟糕的是,我只能停用一个 virtualenv 而不能停用另一个,如下所示:

    (py2.7)(py2.7)deactivate 
    (py2.7)python
    Python 2.7.5 (default, Jun 28 2013, 14:53:08) 
    [GCC 4.4.7 20120313 (Red Hat 4.4.7-3)] on linux2
    Type "help", "copyright", "credits" or "license" for more information.
    >>> exit()
    (py2.7)deactivate
    bash: deactivate: command not found
    (py2.7)python
    Python 2.7.5 (default, Jun 28 2013, 14:53:08) 
    [GCC 4.4.7 20120313 (Red Hat 4.4.7-3)] on linux2
    Type "help", "copyright", "credits" or "license" for more information.
    >>>

如您所见,虽然我系统中的默认python是2.6,但我卡在了virtualenv(2.7)

如果我通过 Ctrl + Alt + F2 切换到文本虚拟控制台并登录,它看起来很正常。

    (py2.7)[username@host ~]$

我可以停用并回到系统默认的python 2.6。

    (py2.7)[username@host ~]$ python
    Python 2.7.5 (default, Jun 28 2013, 14:53:08) 
    [GCC 4.4.7 20120313 (Red Hat 4.4.7-3)] on linux2
    Type "help", "copyright", "credits" or "license" for more information.
    >>> exit()
    (py2.7)[username@host ~]$ deactivate
    [username@host ~]$ python
    Python 2.6.6 (r266:84292, Oct 12 2012, 14:23:48) 
    [GCC 4.4.6 20120305 (Red Hat 4.4.6-4)] on linux2
    Type "help", "copyright", "credits" or "license" for more information.
    >>> 

有什么问题?每当我在 Gnome 中打开终端时,是否可以将默认 virtualenv 设置为 2.7?

我的 Linux 发行版是 RedHat 6。

【问题讨论】:

  • sourcing bin/activate 会更改您的 $PATH,因此它的第一个条目是 virtualenv 的 bin/ 目录。这就是它所做的一切;这纯粹是一种方便。尝试跳过采购指令,而只是摆弄 PATH 环境变量。如果您两次获取 .bashrc,您可能会看到遇到的问题...
  • 附言。我在 .bashrc 的底部添加了 sourcing 指令,并启动了一个新的 bash 终端,它的行为符合预期(即它可以工作)。在 ubuntu 12.04 上测试。 “在 Gnome 环境中单击图标”是什么意思?
  • 你的生活中需要virtualenvwrapper
  • @FredrikPihl:我刚刚编辑了原始帖子以使其清楚。感谢您的建议。

标签: python bash virtualenv


【解决方案1】:

这个怎么样?测试您是否已经在 virtualenv 中:)

test -z "$VIRTUAL_ENV" && source $HOME/virtualenvs/py2.7/bin/activate

【讨论】:

    【解决方案2】:

    Wolph 的回答对我不起作用。相反,我在 .bashrc 中使用了以下测试:

    if (tty -s); then
        source /pathto/virtualenvs/py2.7/bin/activate
    fi
    

    如果标准输入是终端,则 tty 以 0 退出,如果不是,则以 1 退出。如果您不对此进行测试,它会以某种方式执行两次:一次是在登录时,另外一次是在您打开终端时。

    编辑:如果你现在做“屏幕”,你会再次得到 (py2.7)(py2.7)user@computer]$

    【讨论】:

      【解决方案3】:

      我推荐使用autoenv,真的很方便。

      【讨论】:

        【解决方案4】:

        我使用virtualenvwrapper,然后类似于Godrebh's approach,我只是在我的.bashrc(或其他登录脚本)中调用我首选的默认virtualenv。

        if (tty -s); then
          workon py3_default
        fi
        

        【讨论】:

          猜你喜欢
          • 2014-04-12
          • 2021-10-13
          • 1970-01-01
          • 2014-09-24
          • 1970-01-01
          • 1970-01-01
          • 2019-05-19
          • 2018-12-03
          相关资源
          最近更新 更多