Apache-2.2

Python/Django/WSGI/Apache - “ImportError: No module named site”

  • February 20, 2018

我正在嘗試在本地 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 安裝似乎有一個更基本的問題。該問題可能是以下變體:

https://modwsgi.readthedocs.io/en/develop/user-guides/installation-issues.html#multiple-python-versions

你從哪裡得到你正在使用的 mod_wsgi.so?

Python 2.7 安裝在哪裡?

您還安裝了哪些其他 Python 版本以及在哪里安裝?

引用自:https://serverfault.com/questions/285229