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

Heu*_*yie 10 command-line bash scripts virtualenv

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

myproject
-- virtualenv
-- startvenv.sh
Run Code Online (Sandbox Code Playgroud)

startvenv.sh 是:

#!/bin/bash
source virtualenv/bin/activate
Run Code Online (Sandbox Code Playgroud)

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

./startvenv.sh
Run Code Online (Sandbox Code Playgroud)

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

Byt*_*der 11

virtualenv 通过获取(通常不运行)virtualenv/bin/activate脚本来激活。如果您想在自己的脚本中执行此操作,那么您还必须获取该脚本的源代码,而不仅仅是运行它。意义:

source startvenv.sh
Run Code Online (Sandbox Code Playgroud)

运行和采购之间的区别在于,运行在其自己单独的子外壳中执行脚本,该子外壳与父外壳(您从中调用它的那个)隔离,以便例如环境变量和脚本内部的其他更改不会传播到父母。

Sourcing 明确地做到了这一点,在您当前的shell 中执行脚本,这使得对环境变量等的所有更改在完成后保持不变。

这是man bash(关于 Shell Builtins 的部分)的简短摘录:

source startvenv.sh
Run Code Online (Sandbox Code Playgroud)