web-dev-qa-db-ja.com

ImportError:installにDjango.core.handlers.wsgiというモジュールがありませんDjango mod_wsgi config on apache

Apacheとmod_wsgiで動作するようにDjangoをインストールしようとしましたが、このエラーが発生しました。

ImportError: No module named Django.core.handlers.wsgi,

私はそれがユーザーエラーかもしれないことを読みました...

コンソール(ssh)で、ルートアクセスを使用すると、Django.core.handlers.wsgiへのアクセスに問題はありませんが、Apacheがアクセスを要求すると、アクセスできません

私のDjango.wsgi:

import os
import sys

sys.path.append('my/rep/parents/of/my/project')
sys.path.append('/usr/lib/python2.4/site-packages/Django')
os.environ['Django_SETTINGS_MODULE'] = 'montest.settings'
os.environ['PYTHON_Egg_CACHE'] = '/tmp'


import Django.core.handlers.wsgi
application = Django.core.handlers.wsgi.WSGIHandler()

私のvhost.conf:

Alias /media/ my/rep/parents/of/my/projet/montest/media/

<Directory my/rep/parents/of/my/projet/montest/media>
    Order deny,allow
    Allow from all
</Directory>

WSGIScriptAlias /montest my/rep/parents/of/my/projet/Django.wsgi

<Directory my/rep/parents/of/my/projet>
    Order deny,allow
    Allow from all
</Directory>

編集:

Ldd mod_wsgi.soの結果はOK

linux-gate.so.1 => (0x0013c000) 
libpython2.6.so.1.0 => /usr/lib/libpython2.6.so.1.0 (0x00663000) 
libpthread.so.0 => /lib/libpthread.so.0 (0x00bff000) 
libdl.so.2 => /lib/libdl.so.2 (0x0023b000) 
libutil.so.1 => /lib/libutil.so.1 (0x00420000) 
libm.so.6 => /lib/libm.so.6 (0x00110000) 
libc.so.6 => /lib/libc.so.6 (0x00240000) /lib/ld-linux.so.2 (0x0059f000) 

だから私はtest.wsgiでmod_wsgiインストールをテストすることにしました

test.wsgi

def application(environ, start_response): 
    status = '200 OK'
    output = 'Hello world, I am a wsgi app!' 
    response_headers = [('Content-Type', 'text/plain'), ('Content-Length', str(len(output)))] 
    start_response(status, response_headers) 
    return [output]

私のvhost.conf:

WSGIScriptAlias /test /var/www/vhosts/mydomain.fr/subdomains/Django/httpdocs/test.wsgi 
<Directory /var/www/vhosts/mydomain.fr/subdomains/Django/httpdocs> 
    Order allow,deny 
    Allow from all 
    Options +ExecCGI 
</Directory> 

現在は動作しています...次に、Django.wsgi configを試します

33
laurent

Djangoサブディレクトリ(/Library/python/2.7/site-packages))を保持しているサイトパッケージの場所をWSGIDaemonProcessに追加することで問題を解決しました。

WSGIDaemonProcess www.example.com processes=2 threads=15 display-name=%{GROUP} 
    python-path=/Library/python/2.7/site-packages

組み込みサーバーモードを使用している場合は、httpd.conf

WSGIPythonPath /Library/python/2.7/site-packages
16
kpyadav

サイトパッケージディレクトリをsys.pathに追加しようとするのはなぜですか? mod_wsgiがPython 2.4に対してコンパイルされている場合、既にsite-packagesディレクトリを探しているはずです。mod_wsgiのようなサウンドは、Python = 2.4。

実行:

ldd mod_wsgi.so

インストールされたmod_wsgi.soファイルに対して、Pythonコンパイルされたバージョンを計算し、結果を投稿します。

4

以前にこの問題が発生したことがありますが、これはApache/mod_wsgiプロセスにモジュールを読み取る権限がなかったためです。 site-packages/Djangoディレクトリを誰でも読めるようにするか、他の適切なユーザー/グループ権限を追加できます。

3
Bob

違う:

WSGIDaemonProcess www.example.com python-path=~/virtualenvs/virt1/lib/python2.7

正しい:

WSGIDaemonProcess www.example.com python-path=/home/user/virtualenvs/virt1/lib/python2.7

私は、virtualenvがなぜDjango.

3
neurosnap

Djangoインストールを保持する親ディレクトリをwsgi.pyのsys.pathに追加することにより、この問題を解決しました。私の設定はFWIWです。

/ home/banjer/myproject/wsgi.py

import os, sys
sys.path.append('/home/banjer/Django')
sys.path.append('/home/banjer') # this line solved it
sys.executable = '/usr/local/python-2.7.2/bin/python'
os.environ['Django_SETTINGS_MODULE'] = 'myproject.settings'

import Django.core.handlers.wsgi
application = Django.core.handlers.wsgi.WSGIHandler()
2
Banjer

サイトパッケージファイルのアクセス許可を確認してください。ファイルのアクセス許可を修正するまで、上記のソリューションはどれも役に立ちませんでした。 ssl_error_logファイルの内容は次のとおりです。

mod_wsgi (pid=986, process='OSQA', application='xxxxxx.yyy.com|/forum'): Loading WSGI script '/data/http/osqa/osqa.wsgi'. 
mod_wsgi (pid=986): Target WSGI script '/data/http/osqa/osqa.wsgi' cannot be loaded as Python module.
mod_wsgi (pid=986): Exception occurred processing WSGI script '/data/http/osqa/osqa.wsgi'. Traceback (most recent call last):   File "/data/http/osqa/osqa.wsgi", line 14, in <module>
            import Django.core.handlers.wsgi  ImportError: No module named Django.core.handlers.wsgi

しかし、サーバーで解決しました。コマンドラインでこれを行うことができる場合、このソリューションはあなたのためです:

python
>>> import Django.core.handlers.wsgi
>>>

うまくいったのは、私がchmod go + rx site-packages libpython *(これはやり過ぎかもしれませんが、私にとってはうまくいきました。)

Apache.userとしてhttpdとして実行しており、pythonを実行すると、パッケージが正常に表示されますが、権限が正しく設定されませんでした(全員が読むことができます)。 httpdはパッケージを読み取ることができませんでした。

1
drrota

私はこれがやや古い質問であることを知っていますが、この質問を見つけるかもしれない将来のSOユーザーのために私はチャイムだと思いました:

Mod_wsgiはpython2.6にリンクされていますが、設定に従ってpython 2.4を使用してDjangoを実行していますか?

あなたの/ usr/bin/pythonがmod_wsgiのコンパイル対象である2.6以外のものを指していると仮定します。 2.4に対してDjangoを実行しているという事実が原因の可能性もあります。 Djangoがpython2.7を使用しているときにpython2.6にリンクされたmod_wsgiをロードすると、同じエラーを受け取りました。私がインストールしたmod_wsgiのバージョンでは、両方のpython2。[6-7]がサポートされていたため、mod_wsgi.soの/ usr/lib/Apache2/modules /のシンボリックリンクを削除するだけでした-> mod_wsgi .so-2.6に変更し、mod_wsgi.so-> mod_wsgi.so-2.7に変更します。

簡単です。

0
AndrewPK

こんにちは!

Linuxのdeb-distributive(Debian、Ubuntuなど)を使用する場合は、ファイルを編集します

/etc/Apache2/modules/wsgi.load

このファイルには、正しいwsgi-libraryへのパスが含まれていました(アクティブバージョンPythonインタープリター)。Python2.6を使用している場合は、文字列を変更します

LoadModule wsgi_module /usr/lib/Apache2/modules/mod_wsgi.so-2.7

LoadModule wsgi_module /usr/lib/Apache2/modules/mod_wsgi.so-2.6

また、mod_wsgiモジュールへのソフトリンクを変更できます。

cd /usr/lib/Apache2/modules
ln -s mod_wsgi.so-2.6 mod_wsgi.so

ファイルへのリンクを変更することを忘れないでください /etc/Apache2/modules/wsgi.load Apacheサーバーの再起動

service Apache2 restart

追伸悪い英語でごめんなさい

0
Dunaevsky Maxim

古いライブラリからDjangoを削除すると、より良いアイデアになりますpython.

[root@lts5srv1]# rm -rf /root/epd-5.1.0/lib/python2.5/site-packages/Django

..そして現在のpythonを使用している「site-packages」フォルダ内に再インストールします:

[root@lts5srv1 Django-1.4.1]# /usr/local/bin/python2.6 setup.py install

それは私がやったことであり、そのエラーはもう発生しません!

0
Kreshnik

この行は確かに間違っています:

sys.path.append('/usr/lib/python2.4/site-packages/Django')

インストールDjango with/for for the version of Pythonそのmod_wsgiが構築された対象。