2011-08-11 10 views
2

でモジュールを見つけることができない:私のWSGIファイルでのpython +ジャンゴ:私は私のビューのいずれかでsubprocess.Popenを使用popenの

path = os.path.join(os.path.dirname(__file__), 'foo/bar.py') 
subprocess.Popen(["python",path]) 

、私は

import os 
import sys 

ppath = '/home/socialsense/ss/src' 
if ppath not in sys.path: 
     sys.path.append(ppath) 

os.environ['DJANGO_SETTINGS_MODULE'] = 'ss.settings' 

import django.core.handlers.wsgi 
application = django.core.handlers.wsgi.WSGIHandler() 

src私の下に持っています私のdjangoプロジェクトssを持っています。

しかし、ログファイルをチェックすると、bar.pyにエラーが発生しました。ImportError: No module named ss.discovery.models。今度はモジュールss自体がsys.pathに入っていないようですPopen ...

何か私はここで間違っていましたか?

答えて

5

現在のPythonインスタンスでは、sys.pathにしかなりません。他のためにそれを取得するには、os.pathsepPopenenv引数を使用します。

import subprocess 
import os 
import sys 
subprocess.Popen(["python",path], env = {'PYTHONPATH': os.pathsep.join(sys.path)}) 

あなたは本当にパイソンの複数のインスタンスを実行するためmultiprocessing moduleになっているはずです。

編集:@Grahamは、この外部スクリプトをあなたが呼び出すものとは別のバージョンのPythonで実行したいというコメントを指摘しました。それは私にはそう思わないかもしれませんが、もしそうなら、PYTHONPATHの大部分を別のものにする必要がありますので、/home/socialsense/ss/srcを追加する必要があります。

+1

厳密に言えば、WSGIアプリケーションがデフォルトのPythonバージョンで実行されていない代わりに、代わりにsys.pathをPYTHONPATHに追加しないでください。つまり'python'はPython 2.6ですが、mod_wsgiはPython 2.7用にコンパイルされています。 –

0

さらに、

 /home/socialsense/ss
をpythonパスに追加する必要があります。

+0

なぜ彼はそれをするだろうか? – agf

+0

彼はまだ遭遇していない他の問題については。 ;-) –

関連する問題