“source”命令在bin/activate脚本中的含义是什么?

9

这是关于我收到的回复的内容,其中提到我需要在脚本中加入source以激活virtualenv。

作为一个初学者,我不知道这意味着什么,我正在努力理解virtualenv。


1
http://bash.cyberciti.biz/guide/Source_command - Ashwini Chaudhary
virtualenvwrapper脚本使得与虚拟环境的工作变得更加容易。你可以通过workon my_project来代替source /my_project/bin/activate - Burhan Khalid
非常好的问题,我自己也曾经想过! - Christoph
1个回答

20
将脚本引入源中是在当前shell的上下文中运行它,而不是在新shell中运行它。
例如:
. myscript.sh
或:
source myscript.sh

(取决于您正在使用的shell)。

如果您在自己的shell中运行脚本,则对环境所做的任何更改都是在“该”shell中而不是您从中调用它的shell中进行的。通过源化它,您可以影响当前shell的环境。

例如,查看以下转录:

pax> cat script.sh 
export xyzzy=plugh
echo $xyzzy

pax> export xyzzy=twisty

pax> echo $xyzzy ; script.sh ; echo $xyzzy
twisty
plugh
twisty

pax> echo $xyzzy ; . script.sh ; echo $xyzzy
twisty
plugh
plugh
当你在不同的shell中运行脚本时,它将xyzzy设置为plugh,但当shell返回到你原来的shell时,这个设置就会丢失。你会发现原始值已经被“恢复”(用引号括起来是因为原始值实际上从未被改变,只是它的一个副本被改变了)。
当你源代码时,就好像在当前shell中键入了命令,所以对变量的影响是持久的。

值得一提的是,source 是 Bash 的特性,因此这个模式并不是真正可移植的。 - Burhan Khalid
@Burhan 补充说,尽管这取决于你对“可移植”的定义。我想自从十年前我没有使用过没有 bash 的机器了 :-) - paxdiablo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接