我需要一个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环境中。
答案 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
}