Python脚本激活并保持打开Virtualenv

时间:2017-09-05 13:44:10

标签: python python-3.x virtualenv

我需要一个python脚本来激活virtualenv,在virtualenv中运行另一个python程序,然后在第二个python程序关闭后关闭virutalenv。这是我的代码:

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环境中。

2 个答案:

答案 0 :(得分:4)

问题是您正在使用subprocess.Popen([“activate.bat”])创建一个新进程,该进程正在使用该虚拟环境,您不会更改您的环境。你需要做的是在你跨越的同一个过程中调用python脚本:

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

或者您可以编写一个shell脚本来启动虚拟环境并调用您发送给它的任何python脚本。在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

答案 1 :(得分:0)

我完成了任务,但是,我使用了powershell脚本而不是python脚本。这是代码:

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
    }