Le script cible WSGI ne peut pas être chargé en tant que module Python
j'essaie de déployer mod_wsgi avec apache pour exécuter une application django mais j'obtiens une erreur de 500 Erreur de serveur interne les journaux d'apache montrent:
[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
mon hôte virtuel apache est le suivant:
<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>
Et le référencés wsgi fichier dans mon répertoire app avec 0777 autorisations:
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()
j'ai entendu dire que cela peut être parce que l'utilisateur apache n'a pas les autorisations correctes. Mais je n'ai aucune idée de comment arranger ça. J'ai aussi essayé de départ le démon avec l'utilisateur de données www et cela n'a pas résolu le problème.
EDIT:
j'ai résolu ce problème en copiant le fichier des hôtes virtuels dans le fichier par défaut et en désactivant l'ancien avec a2dissite. Je n'ai aucune idée de comment je peux le faire "correctement" et le configurer pour qu'apache aille sur l'hôte virtuel que je veux qu'il soit.
14 réponses
pour moi, le problème était l'inadéquation de la version python de wsgi. J'ai été à l'aide de python 3, donc:
$ sudo apt-get remove libapache2-mod-python libapache2-mod-wsgi
$ sudo apt-get install libapache2-mod-wsgi-py3
avertissement de @alxs avant de copier/coller ces commandes:
S'il y a des projets python 2 tournant sur le serveur qui utilisent WSGI et apache, les commandes ci-dessus les désactiveront effectivement.
sudo chmod a+x django.wsgi
ou
sudo chmod u+x django.wsgi
tant que vous avez la bonne adresse
j'ai eu un problème similaire avec ce message d'erreur dans les logs:
cible script WSGI '/home/web2py/wsgihandler.py ' ne peut pas être chargé en tant que module Python.
la solution était la suppression d'une directive wsgipythonhome incorrecte (pointant vers le répertoire d'application) de /etc/httpd/conf.d/wsgi.conf
recommander de suivre les instructions D'installation/configuration de Graham Dumpleton. Test la configuration contre l'application helloworld m'a montré que mod_wsgi
fonctionnait et la configuration était fautive.
Toutefois, le message d'erreur donné peu d'indices sur ce qui n'allait pas.
j'ai eu le même problème et au début je n'ai pas réalisé que je pouvais faire défiler plus bas et voir le message d'erreur réel. Dans mon cas, c'était une erreur d'importation:
ImportError: No module named bootstrap3
après l'avoir installé via pip (pip install django-bootstrap3), J'ai redémarré Apache et ça a marché.
regardez:
http://code.google.com/p/modwsgi/wiki/WhereToGetHelp?tm=6#Conference_Presentations
il va vous mettre au clair sur quelques choses, y compris les permissions et aussi sur la mise en place de systèmes.path correctement dans votre script WSGI, ce dernier étant probablement votre problème.
avez-vous essayé sans l'option WSGIDaemonProcess?
Je n'ai eu aucun problème à configurer mod_wsgi à la maison, mais je l'ai fait sans l'option démon. Vous avez mentionné résoudre en déplaçant autour des fichiers d'hôtes virtuels et je note cette mise en garde dans les docs pour WSGIDaemonProcess:
notez Également que le nom du démon le groupe du processus doit être unique pour tout le serveur. Qui est, il n'est pas possibilité d'utiliser le même démon processus de nom de groupe dans les différents virtuel hôte.
Je ne sais pas si c'est une coïncidence.
je sais que cette question est assez ancienne, mais j'ai lutté avec cela pendant environ huit heures à l'instant. Si vous avez un système avec SELinux activé et que vous avez mis votre virtualenv dans des endroits particuliers, mod_wsgi ne pourra pas ajouter votrepython-path
vers le site-packages. Il aussi de ne pas soulever les erreurs; il s'avère que le mécanisme qu'il utilise pour ajouter les python-path
sur le site des paquets est avec le Python site
module spécifiquement site.adduserdir()
. Cette méthode ne soulève pas d'erreurs si le le répertoire est manquant ou ne peut pas être consulté, donc mod_wsgi ne génère pas non plus d'erreurs.
en tout cas, essayez de désactiver SELinux avec
sudo setenforce 0
ou en vous assurant que le processus que vous utilisez Apache a les ACLs appropriés avec SELinux pour accéder au répertoire dans lequel se trouve virtualenv.
dans mon propre cas sur windows dans xampp, je chargeais incorrectement le chemin d'application dans le wsgi.py file like so:
Incorrecte:
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')
au Lieu de:
Correct:
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()
N'oubliez pas d'importer le paquet sys python
comme cette question est devenue une sorte de pool pour recueillir des solutions pour les problèmes qui résultent dans l'erreur donnant à cette question son titre, je voudrais ajouter celui-ci, aussi.
dans mon cas, je veux lancer OpenStack Keystone (Ocata) en utilisant Apache et WSGI sur Ubuntu 16.04.2. Les processus commencent mais dès que j'interroge keystone j'obtiens
mod_wsgi (pid=20103): Target WSGI script '/opt/openstack/bin/keystone-wsgi-public' cannot be loaded as Python module.
j'ai eu deux vhosts, on avait
WSGIDaemonProcess keystone-public ...
WSGIProcessGroup keystone-public ...
tandis que l'autre avait
WSGIDaemonProcess keystone-admin ...
WSGIProcessGroup keystone-admin ...
j'ai résolu le problème en les renommant. Les entrées vhost sont maintenant lues:
WSGIDaemonProcess kst-pub ...
WSGIProcessGroup kst-pub ...
et
WSGIDaemonProcess kst-adm ...
WSGIProcessGroup kst-adm ...
Je n'ai pas enquêté davantage. Résolu que fonctionne pour moi.
si vous installez les dépendances Python de votre projet à l'intérieur d'un virtualenv, vous devrez ajouter le chemin du répertoire de ce virtualenv à votre chemin Python. Pour ce faire, ajoutez un chemin supplémentaire à votre directive WSGIPythonPath, avec plusieurs chemins séparés par deux points (:) si vous utilisez un système de type UNIX, ou un point-virgule (;) Si vous utilisez Windows
ajouter à la liste c'est comme ça que ça marche.
J'essayais d'installer CKAN 2.7.2 sur CentOS 7 à partir de la source et je n'arrêtais pas de me heurter à cette erreur. Pour moi, C'était parce que SELinux était activé. Je n'ai pas besoin de le désactiver. Au lieu de cela, après la lecture de https://www.endpoint.com/blog/2010/10/13/selinux-httpd-modwsgi-26-rhel-centos-5, j'ai trouvé que le tournage sur httpd_can_network_connect fixé:
setsebool -P httpd_can_network_connect on
à Partir de cette page:
httpd_can_network_connect - permet à httpd de faire des connexions réseau, y compris les locaux que vous ferez à une base de données
j'avais un problème similaire, par exemple une erreur de journal apache "wsgi.py ne peut pas être chargé en tant que module Python."
il s'est avéré que j'ai dû arrêter et ensuite démarrer apache au lieu de simplement le redémarrer.