2011-10-13 22 views
6

私はvirtualenvで2つのpython環境を作成しました: /usr/local/pythonenv/BASELINE/usr/local/pythonenv/django1です。どちらも--no-site-packagesで作成されました。 easy_installでdjango1環境にdjango1をインストールしました。mod_wsgi pythonは標準ライブラリからインポートできません

マイwsgi.confファイルは、Pythonインタプリタを設定するには、このラインを持っています

WSGIPythonHome /usr/local/pythonenv/BASELINE 

マイdjango.wsgiファイルは次のように開始します。

import site 
site.addsitedir('/usr/local/pythonenv/django1/lib/python2.7/site-packages') 
import os 
import sys 

しかし、私は、私のサイトを訪問しようとすると、I 500エラーが発生し、httpd/error_logには以下が含まれています。

[error] Traceback (most recent call last): 
[error] File "/service/usr/local/django_apps/apache/django.wsgi", line 1, in ? 
[error]  import site 
[error] ImportError: No module named site 

なぜPythonインタプリタがそのowをインポートできないのか分かりません標準ライブラリ。私は、たとえhttpdが/ usr/local/pythonenv/BASELINEのインタプリタを使っているのかをチェックする方法さえも知らないので、それは良いスタートになるでしょう。

編集:無関係ですが、私はこれをここに投稿するべきか、ServerFaultに投稿するべきかについては全く問題がありました。そのフロントのアドバイスは高く評価されました。

編集:http://code.google.com/p/modwsgi/wiki/DebuggingTechniquesのおかげで、デバッグ情報を取得できました。私は

import sys 
def application(environ, start_response): 
    status = '200 OK' 
    output = 'Hello World!' 
    print >> environ['wsgi.errors'], sys.path 
    print >> environ['wsgi.errors'], sys.prefix 
    print >> environ['wsgi.errors'], sys.executable 

    response_headers = [('Content-type', 'text/plain'), ('Content-Length', str(len(output)))] 
    start_response(status, response_headers) 
    return [output] 

これは、/ var/log/httpd/error_logをログにPythonインタプリタ情報を置く含むように私のdjango.wsgiスクリプトを変更しました。エラー出力:

[error] ['/usr/local/pythonenv/BASELINE/lib64/python24.zip',  '/usr/local/pythonenv/BASELINE/lib64/python2.4/', '/usr/local/pythonenv/BASELINE/lib64/python2.4/plat-linux2', '/usr/local/pythonenv/BASELINE/lib64/python2.4/lib-tk', '/usr/local/pythonenv/BASELINE/lib64/python2.4/lib-dynload'] 
[error] /usr/local/pythonenv/BASELINE 
[error] /usr/bin/python 

したがって、sys.pathとsys.executableは私の問題を指しています。何らかの理由で、sys.pathが存在しないlibファイルをいくつか使用しています(BASELINEにはlib64ディレクトリがなく、Python2.7で作成されています)。sys.executableはmod_wsgiがデフォルトの/ usr/bin/pythonインタプリタではなく、/ usr/local/pythonenv/BASELINE/binにあるインタプリタでなければなりません。

なぜこれが当てはまるのか分かりませんが、少なくとももう少し知っています。

編集:これは解決されていますが、Djangoには "Python実行可能ファイル:/ usr/bin/python"がまだリストされていますが(Pythonバージョン:2.7.2以降であることがわかります)/usr/local/bin/pythonを使用します。これは正常ですか?

答えて

4

mod_wsgiは、Python 2.7に対してコンパイルされていない可能性があります。あるPythonバージョンに対してvirtualenvを使用することはできません。別のPythonバージョンに対してmod_wsgiをコンパイルします。

読むから:

http://code.google.com/p/modwsgi/wiki/CheckingYourInstallation#Python_Shared_Library

、その文書のチェックを行います。

+1

はい、これが問題でした。私は./configure --with-python =/usr/local/bin/pythonを実行してmakeとmakeを実行したので、Python 2.7に対してmod_wsgiをコンパイルしたと思っていましたが、そこに座って。私はきれいにしなければなりませんでした。 – sans

関連する問題