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