我写了一个shell脚本。
source ve/bin/activate
当我用命令运行脚本时,将它保存为activate_shell.sh。
bash activate_shell.sh
该脚本正在运行没有错误,但虚拟环境没有被激活。
您的激活脚本路径ve/bin/activate
是相对的。 该脚本将只能从一个目录中工作。 但问题不在这里。
bin/activate
做什么的? 它修改它运行的shell。 这就是为什么你必须source
,而不是作为一个普通的程序调用。
你写的脚本启动自己的shell(bash)副本,激活其中的虚拟环境,然后退出,破坏刚激活的环境。 如果脚本在bin/activate
之后调用Python,它将是来自虚拟环境的Python,而不是系统的Python。
如果你想要一个简单的,易于使用的命令来激活一个virtualenv,定义一个shell函数:
ve() { source $1/bin/activate; }
(是的,在shell提示符下输入上面的行。)
然后键入ve foo
和virtualenv命名为foo
将在您当前的shell中激活,前提是您位于正确的目录中。
如果你需要应付大量的virtualenvs,看看virtualenvwrapper 。
使用脚本运行source
命令将其作为bash activate_shell.sh
将创建另一个shell。 active
命令的所有修改都会修改新创建的shell,这会在完成activate_shell.sh
脚本时终止。
一个简单的方法是将alias添加到.bash_profile
:
alias activate_shell="source ve/bin/activate"