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