2017-09-05 10 views
3

virtualenvを起動し、別のpythonプログラムをvirtualenv内で実行し、2番目のpythonプログラムが終了した後にvirutalenvを終了するpythonスクリプトが必要です。ここに私のコードは次のとおりです。ただしVirtualenvをアクティブにして開いておくPythonスクリプト

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') 

、このコードの実行が、私が活性化されていないvirtualenvのを意味program_fileからのインポートエラーを取得するとき。これをどうすれば解決できますか?

おかげ

編集: これは、Windows環境です。

+0

おそらくこの質問の重複はありますか? https://stackoverflow.com/questions/6943208/activate-a-virtualenv-with-a-python-script – BoboDarph

+0

私の理解から、リンクされている質問は、virtualenvを排他的に起動するためのPythonスクリプトの使用に関するものです。私の質問は、virtualenvがアクティブになっている間にディレクトリを変更し、別のpythonファイルを実行することでそれに追加されます。 – GreenSaber

答えて

0

。コードは次のとおりです。

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"])を使用して新しいプロセスを作成していて、環境を変更していないことです。

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

それとも、仮想環境を起動し、あなたがそれに送る任意のPythonスクリプトを呼び出すシェルスクリプトを書くことができます:何をする必要があるあなたがまたがって同じプロセスでPythonスクリプトを呼び出すことのいずれかです。 (Linuxの場合)はbashで、これは次のようになります。私はしかし、私はpythonの1ではなく、それを行うにはPowerShellスクリプトを使用し、タスクを完了し

#!/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'コマンドを使うと、私が' activate'と呼ぶ 'Scripts'ディレクトリからPythonスクリプトと呼ばれる' program'ディレクトリに移動するにはどうすればいいですか? – GreenSaber

+0

OPコードのM $ Windowsスタイルパスに注意してください。そして活性化はバッチファイルを介して行われるという事実。ウィンドウでbash構文を使用すると面白いです。 – BoboDarph

関連する問題