我读过类似的问题,也尝试过他们的建议,但我仍然无法激活我的虚拟环境。目录的层次结构如下:
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. [ ... ]