it-swarm.com.de

ImportError: Kein Modul namens Django.core.handlers.wsgi in install Django mod_wsgi config für Apache

Ich habe versucht, Django für die Zusammenarbeit mit Apache und mod_wsgi zu installieren, erhalte jedoch diese Fehlermeldung:

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

Ich habe gelesen, dass es Benutzerfehler sein kann ... 

Auf der Konsole (ssh) mit root-Zugriff habe ich keine Probleme beim Zugriff auf Django.core.handlers.wsgi, aber wenn Apache den Zugriff auf sie verlangt, kann dies nicht

Mein 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()

Meine 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>

BEARBEITEN:

Ok mein Ergebnis für Ldd mod_wsgi.so 

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) 

Also entscheide ich mich, meine mod_wsgi-Installation mit test.wsgi zu testen

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]

meine 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> 

Es funktioniert jetzt ... als nächstes werde ich meine Django.wsgi-Konfig ausprobieren

33
laurent

Ich habe das Problem gelöst, indem ich den Ort von Site-Paketen hinzugefügt habe, in dem ich das Django-Unterverzeichnis (/Library/python/2.7/site-packages) in WSGIDaemonProcess aufbewahrt habe:

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

Wenn Sie den eingebetteten Servermodus verwenden, verwenden Sie httpd.conf:

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

Warum versuchen Sie überhaupt, das Verzeichnis site-packages in sys.path hinzuzufügen? Wenn Ihr mod_wsgi gegen Python 2.4 kompiliert wurde, sollte es bereits im Verzeichnis site-packages suchen. Klingt, als wäre Ihr mod_wsgi nicht einmal mit Python 2.4 kompiliert.

Lauf:

ldd mod_wsgi.so

gegen Ihre installierte Datei mod_wsgi.so, um herauszufinden, für welche Python-Version es kompiliert wird, und das Ergebnis zu veröffentlichen.

4

Ich hatte dieses Problem bereits, und der Apache/mod_wsgi-Prozess hatte keine Berechtigung zum Lesen der Module. Sie können Ihr Site-Packages/Django-Verzeichnis weltlesbar machen oder andere geeignete Benutzer-/Gruppenberechtigungen hinzufügen.

3
Bob

Falsch:

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

Recht:

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

Ich verbrachte viel zu viel Zeit damit, herauszufinden, warum meine Virtualenv Django nicht richtig lädt.

3
neurosnap

Ich habe dieses Problem gelöst, indem ich das übergeordnete Verzeichnis, das meine Django-Installation enthält, zu sys.path in wsgi.py hinzugefügt hat. Hier sind meine Einstellungen, 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

Überprüfen Sie die Dateiberechtigungen für das Site-Paket. Keine der oben genannten Lösungen funktionierte für mich, bis ich die Dateiberechtigungen korrigiert habe. Dies ist der Inhalt der Datei "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

Aber ich habe es auf meinem Server gelöst. Wenn Sie dies über die Befehlszeile tun können, ist diese Lösung für Sie:

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

Was funktioniert hat ist, dass ich chmod go + rx site-packages libpython * (Dies könnte übertrieben sein, aber es hat bei mir funktioniert.)

Ich laufe als httpd als Apache.user und Python als root. Ich konnte die Pakete gut sehen, aber meine Berechtigungen waren nicht richtig eingerichtet (von jedem gelesen), und deshalb konnte httpd die Pakete nicht lesen.

1
drrota

Ich weiß, dass dies eine etwas alte Frage ist, aber ich dachte, ich würde für zukünftige SO - Benutzer zocken, die diese Frage finden könnten:

Ihr mod_wsgi ist mit python2.6 verbunden, aber Sie verwenden Python 2.4, um Django gemäß Ihrer Konfiguration auszuführen.

Ich gehe davon aus, dass/usr/bin/python auf etwas anderes als 2.6 zeigt, wofür mod_wsgi kompiliert wird. Es könnte auch daran liegen, dass Sie Django gegen 2.4 laufen lassen. Ich habe die gleiche Fehlermeldung erhalten, als ich mod_wsgi geladen hatte, das mit Python2.6 verknüpft war, als Django Python2.7 verwendete. Mit der Version von mod_wsgi habe ich installiert - es wurde mit Unterstützung für beide python2. [6-7] geliefert. Ich musste also nur den Symlink in/usr/lib/Apache2/modules/für mod_wsgi.so -> mod_wsgi entfernen .so-2.6 und ändern Sie es in mod_wsgi.so -> mod_wsgi.so-2.7.

Leicht genug.

0
AndrewPK

Hallo!

Wenn Sie Deb-Distributive von Linux (Debian, Ubuntu usw.) verwenden, bearbeiten Sie die Datei

/etc/Apache2/modules/wsgi.load

Diese Datei enthielt den Pfad zur Korrektur der Wsgi-Bibliothek (für aktive Version des Python-Interpreters). Wenn Sie Python2.6 verwenden, ändern Sie die Zeichenfolge

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

zu

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

Sie können auch den Softlink zum mod_wsgi-Modul ändern:

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

Vergessen Sie nicht, den Link zur Datei in zu ändern /etc/Apache2/modules/wsgi.load und starten Sie den Apache-Server neu

service Apache2 restart

P.S. Entschuldigung für mein schlechtes Englisch

0
Dunaevsky Maxim

Es wäre eine bessere Idee, wenn Sie Django aus Ihrer alten Python-Bibliothek entfernen.

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

..und installieren Sie es im Ordner 'site-packages' des aktuellen Pythons neu,

[[email protected] Django-1.4.1]# /usr/local/bin/python2.6 setup.py install

Das habe ich gemacht und ich bekomme diesen Fehler nicht mehr!

0
Kreshnik

Diese Zeile ist sicherlich falsch:

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

Installieren Sie Django mit/für die Version von Python, für die mod_wsgi erstellt wurde.