我已經創建了兩個使用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。這是正常的嗎?
是的,這是問題所在。我以爲我編譯mod_wsgi反對Python 2.7,因爲我運行了./configure --with-python =/usr/local/bin/python,然後做了make並進行安裝,但是這不起作用,因爲我仍然有舊的對象坐在那裏。我不得不乾淨,然後通過構建序列。 – sans