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.

39
demandé sur Adam Thomas 2011-06-23 17:11:40

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.

38
répondu nima 2017-11-27 17:14:43
sudo chmod a+x django.wsgi

ou

sudo chmod u+x django.wsgi

tant que vous avez la bonne adresse

17
répondu Gerry 2013-11-01 10:10:06

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.

4
répondu user475443 2012-04-25 13:08:54

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é.

4
répondu dnmh 2015-04-08 18:17:12

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.

2
répondu Graham Dumpleton 2011-06-23 20:23:46

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.

1
répondu John Pirie 2011-06-23 19:52:28

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.

1
répondu Alex Van Liew 2015-11-01 03:13:46

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

1
répondu Dev 2016-09-19 09:25:03

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.

0
répondu user1129682 2017-02-24 21:47:52

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

0
répondu dong 2017-03-24 08:24:51

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

0
répondu John Doyle 2018-02-16 10:57:49

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.

0
répondu curtisp 2018-08-04 18:04:22

Ajouter un chemin dans wsgi.py est la direction, mais au lieu de concaténer django ajouter un chemin