用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