2011-10-13 131 views
6

我已經創建了兩個使用virtualenv的python環境: /usr/local/pythonenv/BASELINE/usr/local/pythonenv/django1。兩者都是用--no-site-packages創建的。 我用easy_install將django安裝到了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 

但是,當我嘗試訪問我的網站,我得到一個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 n標準庫。我甚至不確定如何檢查httpd是否甚至在/ usr/local/pythonenv/BASELINE中使用解釋器,所以這將是一個好的開始。

編輯:無關,但我在我是否應該在這裏發佈此消息或發送給ServerFault相當困難。對此表示讚賞。

編輯:所以我能夠得到一些調試信息感謝http://code.google.com/p/modwsgi/wiki/DebuggingTechniques。我改變了我的django.wsgi腳本包含

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] 

這把Python解釋器信息在/ var /日誌/的httpd/error_log中。錯誤輸出:

[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中的解釋器。

不知道爲什麼會出現這種情況,但至少現在我知道了更多。 (儘管它應該是這樣(並且據我所知,它是,自Python版本:2.7.2以來)編輯:這已解決,但Django仍列出「Python可執行文件:/ usr/bin/python」使用/ usr/local/bin/python。這是正常的嗎?

回答

4

您的mod_wsgi很可能不會針對Python 2.7進行編譯。你不能在一個Python版本中使用virtualenv,mod_wsgi是針對不同的Python版本編譯的。

讀自:

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

,做該文件中的檢查。

+1

是的,這是問題所在。我以爲我編譯mod_wsgi反對Python 2.7,因爲我運行了./configure --with-python =/usr/local/bin/python,然後做了make並進行安裝,但是這不起作用,因爲我仍然有舊的對象坐在那裏。我不得不乾淨,然後通過構建序列。 – sans