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を試します
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
サイトパッケージディレクトリをsys.pathに追加しようとするのはなぜですか? mod_wsgiがPython 2.4に対してコンパイルされている場合、既にsite-packagesディレクトリを探しているはずです。mod_wsgiのようなサウンドは、Python = 2.4。
実行:
ldd mod_wsgi.so
インストールされたmod_wsgi.soファイルに対して、Pythonコンパイルされたバージョンを計算し、結果を投稿します。
以前にこの問題が発生したことがありますが、これはApache/mod_wsgiプロセスにモジュールを読み取る権限がなかったためです。 site-packages/Djangoディレクトリを誰でも読めるようにするか、他の適切なユーザー/グループ権限を追加できます。
違う:
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.
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()
サイトパッケージファイルのアクセス許可を確認してください。ファイルのアクセス許可を修正するまで、上記のソリューションはどれも役に立ちませんでした。 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はパッケージを読み取ることができませんでした。
私はこれがやや古い質問であることを知っていますが、この質問を見つけるかもしれない将来の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に変更します。
簡単です。
こんにちは!
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
追伸悪い英語でごめんなさい
古いライブラリから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
それは私がやったことであり、そのエラーはもう発生しません!
この行は確かに間違っています:
sys.path.append('/usr/lib/python2.4/site-packages/Django')
インストールDjango with/for for the version of Pythonそのmod_wsgiが構築された対象。