簡體   English   中英

mod_wsgi python無法從標准庫導入

[英]mod_wsgi python can't import from standard library

我用virtualenv創建了兩個python環境: /usr/local/pythonenv/BASELINE/usr/local/pythonenv/django1 兩者都是使用--no-site-packages創建的。 我使用easy_install將django安裝到django1環境中。

我的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解釋器無法導入自己的標准庫。 我甚至不確定如何檢查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 / log / 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中的解釋器。

不知道為什么會這樣,但至少我現在知道的更多了。

編輯:這已經解決了,但Django仍然列出“Python可執行文件:/ usr / bin / python”,即使它應該是(並且據我所知,它是,因為Python版本:2.7.2)使用/ usr / local / bin目錄/蟒蛇。 這是正常的嗎?

你的mod_wsgi很可能不是針對Python 2.7編譯的。 你不能將virtualenv用於一個Python版本,而mod_wsgi是針對不同的Python版本編譯的。

閱讀:

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

並檢查該文件。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM