2017-09-05 65 views
3

我需要一个python脚本,将激活一个virtualenv中,运行的virtualenv内的另一个Python程序,然后第二Python程序关闭后关闭virutalenv。这里是我的代码:Python脚本来激活并保持开放VIRTUALENV

import os 
import subprocess 
from subprocess import Popen 

activate_dir = "C:/Users/JohnDoe/theprogram/Scripts/" 
os.chdir(activate_dir) 
subprocess.Popen(["activate.bat"]) 

cal_dir = "C:/Users/JohnDoe/theprogram/" 
os.chdir(cal_dir) 
os.system('python program_file.py') 

然而,当这个代码运行,我从program_file这意味着virtualenv中没有活化的导入错误。我怎样才能解决这个问题?

感谢

编辑: 这是在Windows环境。

+0

这个问题也许可能的重复? https://stackoverflow.com/questions/6943208/activate-a-virtualenv-with-a-python-script – BoboDarph

+0

从我的理解,链接的问题是关于使用Python脚本完全激活的virtualenv。我的问题增加了,通过改变一个目录并在virtualenv被激活时运行另一个python文件。 – GreenSaber

回答

0

我完成了任务,但是,我使用PowerShell脚本来做到这一点,而不是蟒蛇之一。下面是代码:

PowerShell.exe -windowstyle hidden { 
Set-Location C:\Users\Users\JohnDoe\theprogram\Scripts\ 
./activate 
Set-Location C:\Users\Users\JohnDoe\theprogram\ 
python program_file.py 
Set-Location C:\Users\Users\JohnDoe\theprogram\Scripts\ 
./deactivate 
    } 
2

的问题是,要创建一个使用subprocess.Popen所使用的虚拟环境,你不改变你的环境的新工艺([“activate.bat”])。你需要做的是要么调用Python脚本在你跨越相同的过程:

os.system("source activate;python -V") 

或者你可以编写一个启动虚拟环境,并打电话给你发送给它的任何python脚本的shell脚本。在bash(在Linux上),这将是:

#!/bin/bash 
# start a virtual environment and call a python module 
# usage: ./runVirenvPythonModule module.py 
source activate 
python $1 # this is the first cmd line argument passed in 
+0

啊,很好的答案!如果我使用'os.system'命令,我将如何从'Scripts'目录去的地方我称之为'activate'到'program' dir其中我所说的python脚本? – GreenSaber

+0

请注意OP代码的M $ Windows风格的路径。事实上,激活是通过批处理文件完成的。在Windows中使用bash语法将会很有趣。 – BoboDarph

相关问题