web-dev-qa-db-de.com

Ziel-WSGI-Skript kann nicht als Python-Modul geladen werden

Ich versuche, mod_wsgi mit Apache bereitzustellen, um eine Django-Anwendung auszuführen, aber ich erhalte einen Fehler mit dem Fehler "500" des internen Servers. Die Apache-Protokolle zeigen Folgendes:

[Thu Jun 23 14:01:47 2011] [error] [client 152.78.95.64] mod_wsgi (pid=16142): Exception occurred processing WSGI script '/home/user/bms/Apache/Django.wsgi'.
[Thu Jun 23 14:01:47 2011] [error] [client 152.78.95.64] Traceback (most recent call last):
[Thu Jun 23 14:01:47 2011] [error] [client 152.78.95.64]   File "/home/user/bms/Apache/Django.wsgi", line 13, in <module>
[Thu Jun 23 14:01:47 2011] [error] [client 152.78.95.64]     import Django.core.handlers.wsgi
[Thu Jun 23 14:01:47 2011] [error] [client 152.78.95.64] ImportError: No module named Django.core.handlers.wsgi

Mein virtueller Apache-Host lautet wie folgt:

<VirtualHost *:80>

    DocumentRoot /home/user/bms

    <Directory /home/user/bms>
        Order allow,deny
        Allow from all
    </Directory>

WSGIDaemonProcess bms user=user group=user processes=2 threads=25 python-path=/usr/local/lib/python2.7/site-packages


    WSGIProcessGroup bms

    WSGIScriptAlias / /home/user/bms/Apache/Django.wsgi

</VirtualHost>

Und die referenzierte wsgi-Datei in meinem App-Verzeichnis mit 0777-Berechtigungen:

import os
import sys

path = '/home/user/bms'
if path not in sys.path:
    sys.path.append(path)

os.environ['Django_SETTINGS_MODULE'] = 'bms.settings'

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

Ich habe gehört, dass dies möglicherweise daran liegt, dass der Apache-Benutzer nicht die richtigen Berechtigungen hat. Ich habe jedoch keine Ahnung, wie ich das beheben kann. Ich habe auch versucht, den Deamon mit dem www-data-Benutzer zu starten, und das Problem wurde dadurch nicht gelöst.

EDIT:

Ich habe das Problem gelöst, indem ich die virtuelle Hosts-Datei in die Standarddatei kopiert und dann die alte mit a2dissite deaktiviert habe. Ich habe keine Ahnung, wie ich es "richtig" machen kann und es so einstellen kann, dass Apache zu dem virtuellen Host geht, den ich jedoch möchte.

44
Adam Thomas

Für mich war das Problem ein Konflikt bei der Wsgi-Python-Version. Ich habe Python 3 benutzt, also:

$ Sudo apt-get remove libapache2-mod-python libapache2-mod-wsgi
$ Sudo apt-get install libapache2-mod-wsgi-py3

Warnung von @alxs bevor Sie kopieren/einfügen diese Befehle:
Wenn auf dem Server Python-2-Projekte ausgeführt werden, die wsgi und Apache verwenden, werden sie durch die obigen Befehle effektiv heruntergefahren.

47
nima

Für mich bestand das Problem darin, dass das WSGI-Skript nicht ausführbar war.

Sudo chmod a+x Django.wsgi

oder nur

Sudo chmod u+x Django.wsgi

solange du den richtigen Besitzer hast

17
Gerry

Ich hatte ein ähnliches Problem mit dieser Fehlermeldung in den Protokollen:

Das Ziel-WSGI-Skript '/home/web2py/wsgihandler.py' kann nicht als Python-Modul geladen werden.

Die Lösung war das Löschen einer falschen WSGIPythonHome-Direktive (die auf das Anwendungsverzeichnis zeigt) aus /etc/httpd/conf.d/wsgi.conf.

Ich bin bei RedHat und verwende CentOS-Repositories.

Befolgen Sie die Anweisungen von Graham Dumpleton zur Installation/Konfiguration. Beim Testen der Konfiguration mit der helloworld-Anwendung wurde festgestellt, dass mod_wsgi funktioniert hat und die Konfiguration fehlerhaft war.

Die Fehlermeldung gab jedoch wenig Aufschluss darüber, was falsch war.

5
user475443

Ich hatte das gleiche Problem und zunächst wusste ich nicht, dass ich weiter scrollen und die eigentliche Fehlermeldung sehen konnte. In meinem Fall war es ein Importfehler:

ImportError: No module named bootstrap3

Nach der Installation über pip (pip install Django-bootstrap3) startete ich Apache neu und es funktionierte.

4
dnmh

Ich weiß, dass diese Frage ziemlich alt ist, aber ich habe gerade acht Stunden damit gerungen. Wenn Sie ein System mit aktiviertem SELinux haben und Ihre virtualenv an bestimmten Stellen platziert haben, kann mod_wsgi den Site-Packages nicht Ihren angegebenen python-path hinzufügen. Es werden auch keine Fehler angezeigt; Der Mechanismus, den er verwendet, um den angegebenen python-path zu den Site-Paketen hinzuzufügen, ist das Python-Modul site, speziell site.adduserdir(). Diese Methode löst keine Fehler aus, wenn das Verzeichnis fehlt oder nicht aufgerufen werden kann. Daher gibt mod_wsgi keine Fehler aus.

Versuchen Sie trotzdem, SELinux mit abzuschalten 

Sudo setenforce 0

oder indem Sie sicherstellen, dass der Prozess, auf dem Sie Apache als ausführen, über die entsprechenden Zugriffssteuerungslisten mit SELinux verfügt, um auf das Verzeichnis zuzugreifen, in dem sich die virtualenv befindet.

2
Alex Van Liew

In meinem eigenen Fall unter Windows in xampp habe ich den Anwendungspfad falsch in die Datei wsgi.py geladen:

Falsch:

    os.environ.setdefault("Django_SETTINGS_MODULE", "advisory_portal.settings")

    application = get_wsgi_application()
    sys.path.append('C:/xampp/htdocs/advisory_portal/advisory_portal')
    sys.path.append('C:/xampp/htdocs/advisory_portal')

Anstatt:

Richtig:

sys.path.append('C:/xampp/htdocs/advisory_portal/advisory_portal')
sys.path.append('C:/xampp/htdocs/advisory_portal')
os.environ.setdefault("Django_SETTINGS_MODULE", "advisory_portal.settings")

application = get_wsgi_application()

Vergessen Sie nicht, das Sys Python-Paket zu importieren

1
Dev

Haben Sie es ohne die Option WSGIDaemonProcess versucht?

Ich hatte keine Probleme, mod_wsgi zu Hause einzurichten, tat dies jedoch ohne die Daemon-Option. Sie haben die Lösung durch das Verschieben von virtuellen Hosts-Dateien erwähnt, und ich stelle diese Einschränkung in den Dokumenten für WSGIDaemonProcess fest:

Beachten Sie auch, dass der Name des Daemons Prozessgruppe muss für die .__ eindeutig sein. ganze Server. Es ist nicht Es ist möglich, denselben Daemon zu verwenden Prozessgruppenname in verschiedenen virtuelle Hosts.

Weiß nicht, ob das Zufall ist.

1
John Pirie

Der anhängende Pfad in wsgi.py ist die Richtung, aber anstatt Django anhängenden Pfad anzufügen sys.path.append("/path/to/virtual/environment/lib/pythonX.X/site-packages") hat meinen Fall behoben.

Dies ist für ein Django-Projekt mit python2.7 auf Ubuntu 16.04.

0
lydfen

Ich hatte das gleiche Problem und wurde mit gelöst 

Sudo easy_install cx_Oracle

denken Sie jedoch daran, cx_Oracle vor der Installation mit easy_install zu deinstallieren.

Befehl zum Deinstallieren: pip uninstall cx_Oracle

0
Bicky

Die Lösung, die schließlich für mich funktionierte, nachdem viele dieser Optionen erfolglos ausprobiert worden waren, war einfach, aber schwer fassbar, da ich mich schwer erkundete, welche Pfade tatsächlich zu verwenden sind.

Ich habe ein Mezzanine-Projekt erstellt, das auf Django basiert, mit den folgenden Befehlen. Ich liste sie hier auf, um die Pfade explizit zu machen.

/var/www/mysite$ python3 -m venv ./venv
/var/www/mysite$ source ./venv/bin/activate
(venv) /var/www/mysite$ mezzanine-project mysite
(venv) /var/www/mysite$ cd mysite
(venv) /var/www/mysite/mysite$

Nun lautet der Pfad zur Datei wsgi.py:

/var/www/mysite/mysite/mysite/wsgi.py

Es folgen die Anweisungen, die für diese Installation in meiner /etc/Apache2/sites-available/mysite.conf-Datei ausgeführt wurden:

...<VirtualHost...>
    ...
    WSGIDaemonProcess mysite python-home=/var/www/mysite/venv python-path=/var/www/mysite/mysite
    WSGIProcessGroup mysite
    WSGIScriptAlias / /var/www/mysite/mysite/mysite/wsgi.py process-group=accounting
    <Directory /var/www/mysite/mysite/mysite>
        <Files wsgi.py>
            Require all granted
        </Files>
    </Directory>
    ...
</VirtualHost>...

Ich habe zahlreiche Versionen von Python-Home und Python-Pfad ausprobiert und den Fehler des OP wiederholt erhalten. Wenn Sie die richtigen Pfade verwenden, sollten Sie auch die gleichen Schritte ausführen wie @ Devs Antwort , ohne in der Datei wsgi.py Pfade hinzufügen zu müssen (bereitgestellt von mezzanine und in meinem Fall ist keine Bearbeitung erforderlich).

0
mightypile

Da diese Frage zu einem Pool für das Sammeln von Lösungen für Probleme wurde, die dazu führen, dass der Fehler dieser Frage den Titel gibt, möchte ich auch diese hinzufügen.

In meinem Fall möchte ich OpenStack Keystone (Ocata) mit Apache und WSGI unter Ubuntu 16.04.2 ausführen. Die Prozesse starten aber sobald ich Keystone abfrage bekomme ich

mod_wsgi (pid=20103): Target WSGI script '/opt/openstack/bin/keystone-wsgi-public' cannot be loaded as Python module.

Ich hatte zwei vhosts, einer hatte

WSGIDaemonProcess keystone-public ...
WSGIProcessGroup keystone-public ...

während der andere hatte

WSGIDaemonProcess keystone-admin ...
WSGIProcessGroup keystone-admin ...

Ich habe das Problem gelöst, indem ich sie umbenannt habe. Die vhost-Einträge lauten jetzt:

WSGIDaemonProcess kst-pub ...
WSGIProcessGroup kst-pub ...

und

WSGIDaemonProcess kst-adm ...
WSGIProcessGroup kst-adm ...

Ich habe nicht weiter recherchiert. Wie für mich gelöst.

0
user1129682

Ich hatte ein ähnliches Problem, zB Apache-Protokollfehler "wsgi.py kann nicht als Python-Modul geladen werden." 

Es stellte sich heraus, dass ich Apache stoppen und dann starten musste, anstatt ihn einfach neu zu starten.

0
curtisp

Wenn Sie die Python-Abhängigkeiten Ihres Projekts in einer virtualenv installieren, müssen Sie den Pfad zu diesem virtualenv-Verzeichnis auch Ihrem Python-Pfad hinzufügen. Fügen Sie der WSGIPythonPath-Direktive einen zusätzlichen Pfad hinzu, wobei mehrere Pfade durch einen Doppelpunkt (:) (bei Verwendung eines UNIX-ähnlichen Systems) oder durch ein Semikolon (;) bei Windows getrennt sind

0
dong

Ich füge die Liste so hinzu, dass ich es funktioniere.

Ich habe versucht, CKAN 2.7.2 unter CentOS 7 aus dem Quellcode zu installieren, und stieß immer wieder auf diesen Fehler ... Für mich war es, weil SELinux aktiviert war. Ich musste es nicht deaktivieren. Nach dem Lesen von https://www.endpoint.com/blog/2010/10/13/selinux-httpd-modwsgi-26-rhel-centos-5 habe ich festgestellt, dass das Einschalten von httpd_can_network_connect das Problem behoben hat:

setsebool -P httpd_can_network_connect on

Von dieser Seite:

httpd_can_network_connect - Erlaubt httpd, Netzwerkverbindungen herzustellen, einschließlich der lokalen, die Sie zu einer Datenbank machen

0
John Doyle

Ich habe diesen Fehler erhalten. Ich verwende Python 3 in einer virtuellen Umgebung, die in meinen Apache-Protokollen gefunden wurde

[Fr 21 Dez 08: 01: 43.471561 2018] [mpm_prefork: notice] [pid 21786] AH00163: Apache/2.4.6 (Red Hat Enterprise Linux) mod_wsgi/3.4 Python/2.7.5 konfiguriert - Normalbetrieb fortsetzen

Ich hatte wsgi mit yum -y install mod_wsgi installiert. Dies hatte mod_wsgi installiert, das für Python 2 kompiliert wurde 

yum remove mod_wsgi

und installierte mod_wsgi für python 3 mit

yum install python35u-mod_wsgi

Danach hat es funktioniert

0
Leroy Kayanda