2017-09-05 38 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