无法使用 shell 脚本激活虚拟环境

无法使用 shell 脚本激活虚拟环境

我读过类似的问题,也尝试过他们的建议,但我仍然无法激活我的虚拟环境。目录的层次结构如下:

myproject
-- virtualenv
-- startvenv.sh

startvenv.sh 是:

#!/bin/bash
source virtualenv/bin/activate

而且,我正在通过以下方式运行 startvenv.sh:

./startvenv.sh

没有错误,但什么都没发生。为什么?理想情况下,我想打开一个新终端并在那里激活我的虚拟环境。

答案1

虚拟环境通过以下方式激活采购(通常不运行)virtualenv/bin/activate脚本。如果你想在自己的脚本中执行此操作,那么你必须来源该脚本也将被删除,而不仅仅是运行它。含义:

source startvenv.sh

运行和采购之间的区别在于,运行在其自己的单独子 shell 中执行脚本,该子 shell 与父 shell(调用它的 shell)隔离,因此脚本内的环境变量和其他更改不会传播到父 shell。

Sourcing 明确地做了这件事,在你的当前的shell,它在完成后保留对环境变量等的所有更改。

以下是(有关 Shell Builtins 的部分)的简短摘录man bash

    .  filename [arguments]
   source filename [arguments]
          Read and execute commands from filename  in  the  current  shell
          environment  and return the exit status of the last command exe‐
          cuted from filename.  [ ... ]

相关内容