我想从python脚本激活virtualenv实例 .
我知道这很容易做到,但我见过的所有例子都使用它在env中运行命令然后关闭子进程 .
我想要的只是激活virtualenv并返回shell,就像bin / activate一样 .
像这样的东西:
$me: my-script.py -d env-name
$(env-name)me:
这可能吗 ?
相关:
http://groups.google.com/group/python-virtualenv/browse_thread/thread/15f8a9b0506abeae
6 回答
只是一个适合我的简单解决方案 . 我不知道为什么你需要bash脚本基本上做了一个无用的步骤(我错了吗?)
基本上你需要的是:
然后,而不是停用venv,只需按Ctrl D或退出 .
这是一个可能的解决方案还是不是你想要的?
如果你想在virtualenv下运行一个Python子进程,你可以通过使用生活在virtualenv的/ bin /目录中的python解释器运行脚本来做到这一点:
但是,如果要在当前python解释器而不是子进程下激活virtualenv,可以使用
activate_this.py
脚本:事实证明,问题并不简单,但解决方案是 .
首先,我必须创建一个shell脚本来包装“source”命令 . 那说我用的是“ . ”相反,因为我已经读过,使用它比使用bash脚本的源更好 .
然后从我的python脚本我可以简单地这样做:
整个技巧都在--rcfile参数中 .
当python解释器退出时,将当前shell保留在激活的环境中 .
赢!
在virtualenv的解释器下运行脚本的最简单的解决方案是将默认的shebang行替换为virtualenv的解释器的路径,就像在脚本的开头一样:
使脚本可执行:
运行脚本:
瞧!
要根据官方Virtualenv documentation运行另一个Python环境,在命令行中你可以指定可执行python二进制文件的完整路径,只需要(之前不需要激活virtualenv):
如果您想使用virtualenv从命令行调用脚本,则同样适用,您不需要在之前激活它:
对于Windows环境也是如此(无论是来自命令行还是来自脚本:
子进程env在它不再存在的那一刻就丢失了,将环境内容从那里移动到父进程有点棘手 .
你可能需要做的是产生一个shell脚本(您可以动态地生成一个到/ tmp),这将输出的virtualenv环境变量到一个文件,然后您可以在父Python进程读取并投入os.environ .
或者您只需解析激活脚本,使用for line in line(“bin / activate”)并手动提取内容并放入os.environ . 棘手,但并非不可能 .