私は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を使用します。これは正常ですか?
はい、これが問題でした。私は./configure --with-python =/usr/local/bin/pythonを実行してmakeとmakeを実行したので、Python 2.7に対してmod_wsgiをコンパイルしたと思っていましたが、そこに座って。私はきれいにしなければなりませんでした。 – sans