web-dev-qa-db-ja.com

Python / Django / WSGI / Apache-「ImportError:サイトという名前のモジュールはありません」

Djangoアプリケーションをローカルubuntuマシンで使用しようとしています。ただし、サイトが機能せず、/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メッセージを示しているという通知です

日時フィールドがないことに注意してください。これらのエラーは、Webサイトにアクセスしていない場合でも(つまり、Webリクエストを行わない場合でも)繰り返されます。ブラウザでWebサイトにアクセスすると、大量のダウンロードを待つようにハングアップします。

設定

Apacheモジュール

私はpython 2.5 virtualenvを多数のパッケージ(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

/etc/hostsでlocalhostに設定されているドメイン名として「tix」を使用しています

$ grep tix /etc/hosts
127.0.0.1   tix

Apache設定

これが私の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='[email protected]', 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にアップグレードしてから、上記のエラーが発生します。

8
Rory

あなたの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バージョンをインストールしましたか、どこにありますか?

6