用python脚本激活virtualenv

我想从python脚本激活一个virtualenv实例。

我知道这很容易做,但是我所见过的所有例子都是用它来在env中运行命令,然后closuressubprocess。

我想要的只是激活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

如果要在virtualenv下运行Pythonsubprocess,可以使用位于virtualenv的/ bin /目录下的python解释器运行该脚本:

 # path to a python interpreter that runs any python script # under the virtualenv /path/to/virtualenv/ python_bin = "/path/to/virtualenv/bin/python" # path to the script that must run under the virtualenv script_file = "must/run/under/virtualenv/script.py" subprocess.Popen([python_bin, script_file]) 

但是,如果您想在当前的Python解释器而不是subprocess下激活virtualenv,则可以使用activate_this.py脚本:

 # doing execfile() on this file will alter the current interpreter's # environment so you can import libraries in the virtualenv activate_this_file = "/path/to/virtualenv/bin/activate_this.py" execfile(activate_this_file, dict(__file__=activate_this_file)) 

原来是的,这个问题并不简单,但解决的办法是。

首先我必须创build一个shell脚本来包装“source”命令。 那就是说我用了“。” 相反,因为我已经读过,比使用bash脚本的源代码更好。

 #!/bin/bash . /path/to/env/bin/activate 

然后从我的Python脚本,我可以简单地做到这一点:

 import os os.system('/bin/bash --rcfile /path/to/myscript.sh') 

整个技巧都在–rcfile参数中。

当python解释器退出时,它会在激活的环境中保留当前的shell。

赢!

在virtualenv的解释器下运行你的脚本的最简单的解决scheme是在脚本的开头用你的virtualenv的解释器的path代替默认的shebang行:

 #!/path/to/project/venv/bin/python 

使脚本可执行:

 chmod u+x script.py 

运行脚本:

 ./script.py 

瞧!

只是一个简单的解决scheme,适合我。 我不知道为什么你需要bash脚本,基本上做了一个无用的步骤(我错了吗?)

 import os os.system('/bin/bash --rcfile flask/bin/activate') 

基本上你需要做什么:

 [hellsing@silence Foundation]$ python2.7 pythonvenv.py (flask)[hellsing@silence Foundation]$ 

然后,不要停用venv,只需按Ctrl + D或退出。
这是一个可能的解决scheme,或不是你想要的?

subprocessenv在它不复存在的时刻就会丢失,将环境内容从那里移到父进程有点棘手。

你可能需要做的是产生一个shell脚本(你可以为/ tmpdynamic生成一个脚本),这个脚本会将virtualenv环境variables输出到一个文件中,然后在父进程中读取并放到os.environ中。

或者你只是parsing激活脚本中使用打开(“斌/激活”)线和手动提取的东西,并把os.environ。 整蛊,但不是不可能的。

要根据官方Virtualenv文档运行另一个Python环境,可以在命令行中指定可执行的Python二进制文件的完整path,就是这样(不需要在之前激活virtualenv):

 /path/to/virtualenv/bin/python myscript.py 

如果你想用你的virtualenv从命令行调用一个脚本,你也不需要激活它:

 me$ /path/to/virtualenv/bin/python myscript.py 

与Windows环境相同(无论是从命令行还是从脚本:

 > \path\to\env\Scripts\python.exe myscript.py