Python/Django/WSGI/Apache - “ImportError: No module named site”
我正在嘗試在本地 ubuntu 機器上使用 django 應用程序。但是該站點無法正常工作,並且我
/var/log/apache2/errors.log
充滿了這樣的消息:ImportError: No module named site
我的
/var/log/apache2/error.log
(今天)看起來像這樣:$ cat error.log | uniq -c 1 [Wed Jun 29 09:37:37 2011] [notice] Apache/2.2.17 (Ubuntu) mod_wsgi/3.3 Python/2.7.1+ configured -- resuming normal operations 12966 ImportError: No module named site
那是我打開機器時它啟動的通知,然後是 12,966 行都在說該
no module named site
消息請注意缺少日期時間欄位。即使不訪問網站(即即使不發出網路請求),這些錯誤也會重複出現。在瀏覽器中訪問該網站時,它只是掛起,好像在等待大量下載。
設置
阿帕奇模組
我正在使用一個 python 2.5 virtualenv,其中包含許多安裝了 pip 的包(包括 django 1.1)。我已經載入了 mod_wsgi:
$ ls -l /etc/apache2/mods-enabled/wsgi* lrwxrwxrwx 1 root root 27 2010-10-04 16:50 /etc/apache2/mods-enabled/wsgi.conf -> ../mods-available/wsgi.conf lrwxrwxrwx 1 root root 27 2010-10-04 16:50 /etc/apache2/mods-enabled/wsgi.load -> ../mods-available/wsgi.load
我使用“tix”作為設置為 localhost 的域名
/etc/hosts
$ grep tix /etc/hosts 127.0.0.1 tix
阿帕奇配置
這是我的 apache 配置*(您可以看到一些使其工作的嘗試、註釋行等)*:
# mod-wsgi enabled virtual host WSGISocketPrefix /home/rory/tix/tix_wsgi/tmp WSGIPythonHome /home/rory/tix/virtualenv2.5/lib/python2.5/ UnSetEnv PYTHONSTARTUP SetEnv PYTHONPATH /home/rory/tix/virtualenv2.5/lib/python2.5/ #WSGIPythonEggs /home/rory/svn/tix/tmp/python-eggs <VirtualHost 127.0.0.1:80> ServerName tix Alias /media /home/rory/tix/tix/media Alias /selenium /home/rory/tix/tix/tests/selenium <Directory /home/rory/tix/tix/media> SetHandler None Order allow,deny Allow from all </Directory> WSGIDaemonProcess tix user=tix_wsgi group=tix_wsgi processes=4 threads=1 python-path=/home/rory/tix/virtualenv2.5/lib/python2.5/site-packages WSGIScriptAlias / /home/rory/tix/tix/apache/loader.wsgi WSGIProcessGroup tix CustomLog /var/log/apache2/tix_access.log combined ErrorLog /var/log/apache2/tix_error.log <Location /server-status> SetHandler server-status Order Deny,Allow Deny from all </Location> <IfModule rewrite_module> RewriteEngine On RewriteCond %{HTTP_HOST} ^media.tix$ [NC] RewriteRule .? http://tix/media%{REQUEST_URI} [R=301,L] </IfModule> </VirtualHost>
wsgi 載入器
這是我的 loader.wsgi:
我曾經
import site
在這個文件中,我認為這可能導致了問題,但我刪除了它並且錯誤不斷出現。# loader.wsgi - WSGI adapter for tix django project # The python paste wrapper catches apache 500 errors (Internal Server Errors) and gives debug output # See http://pythonpaste.org/modules/exceptions.html import os import sys os.environ['DJANGO_SETTINGS_MODULE'] = 'tix.settings.base' from paste.exceptions.errormiddleware import ErrorMiddleware import django.core.handlers.wsgi tixette = django.core.handlers.wsgi.WSGIHandler() application = ErrorMiddleware(tixette, debug=True, error_email='operator@example.com', error_subject_prefix='Alert: wsgi loader python paste: ', error_log='/tix/1.0/logs/paste.log', show_exceptions_in_wsgi_errors=False)
此配置曾經在 Ubuntu 10.10 上執行良好,但自從我升級到 Ubuntu 11.04 後,我收到了上述錯誤。
您的 mod_wsgi 是為 Python 2.7 編譯的。然後,您不能嘗試將其指向 Python 2.5 虛擬環境。
另外,設置:
WSGIPythonHome /home/rory/tix/virtualenv2.5/lib/python2.5/
即使它是 Python 2.7 虛擬環境,也指向錯誤的東西。
設置:
UnSetEnv PYTHONSTARTUP SetEnv PYTHONPATH /home/rory/tix/virtualenv2.5/lib/python2.5/
也不會做任何事情,也不知道您從哪裡得到可以做到這一點的想法。
FWIW,關於虛擬環境的 mod_wsgi 文件可以在以下位置找到:
https://modwsgi.readthedocs.io/en/develop/user-guides/virtual-environments.html
不過,這對您沒有幫助,因為您的 mod_wsgi 和 Python 安裝似乎有一個更基本的問題。該問題可能是以下變體:
你從哪裡得到你正在使用的 mod_wsgi.so?
Python 2.7 安裝在哪裡?
您還安裝了哪些其他 Python 版本以及在哪里安裝?