2015-01-19 14 views
5

Ciao sto ottenendo l'errore sotto quando andando sul sito URL sul server di Ubuntu 14.10 in esecuzione Apache 2 con mod_wsgi e pitone su Django.esecuzione django python 3.4 su mod_wsgi con apache2

La mia applicazione django utilizza python 3.4 ma sembra essere inadempiente a python 2.7, non riesco a importare immagini da PIL e AES da pycrypto.

ImportError a/
non può importare nome _imaging
Richiesta Metodo: GET
Richiesta URL:
Django Versione: 1.7.3
Tipo di eccezione: ImportError
Eccezione Valore:
non può importare nome _imaging
Eccezione Località: /usr/local/lib/python3.4/dist-packages/PIL/Image.py in , riga 63
Python eseguibile:/usr/bin/python
Python Versione: 2.7.6
Python Percorso:
[ '/ var/www/bl Abla '
'/usr/local/lib/python3.4/dist-packages',
'/usr/lib/python2.7',
' /usr/lib/python2.7/plat-x86_64 -linux-gnu '
'/usr/lib/python2.7/lib-tk',
'',
' /usr/lib/python2.7 /usr/lib/python2.7/lib-old/lib-dynload '
'/usr/local/lib/python2.7/dist-packages',
'/usr/lib/python2.7/dist-packages',
'/var/www/blabla ',
'/usr/local/lib/python3.4/dist-packages']

+1

Sì. Non ci sono dubbi su Python 2.7. Come hai configurato il sito Apache per usare mod_wsgi? Puoi pubblicare la configurazione del tuo sito? –

risposta

8

Credo che mod_wsgi è compilato contro una versione specifica di Python, quindi è necessaria una versione py3.4 di mod_wsgi. Potresti essere in grado di ottenerne uno dal repository del tuo sistema operativo o puoi crearne uno senza troppi drammi. Dalla memoria avrete bisogno di pacchetti gcc e python-dev (python3-dev?) Da compilare.

OK, quick google, per ubuntu 14.10: sudo apt-get install libapache2-mod-wsgi-py3 dovrebbe installare una versione py3 di mod_wsgi (probabilmente vorrai rimuovere la versione py2 esistente).

Aggiunta di una linea di shebang non farà nulla di buono come l'interprete Python è già caricato prima che lo script wsgi.py viene letto.

+0

Risposta salvavita. Ho trascorso 4 ore cercando di capirlo. –

0

Da quello che vedo qui la vostra applicazione utilizza py2 interprete con py3 moduli compilati, che è vietato.

Una soluzione semplice possibile che mi viene in mente è quello di aggiungere o modificare prima linea di manage.py-#!/usr/bin/python3. Questo indicherà allo script di essere interpretato con py3.

Avanti sulla lista ipotesi sarebbe errori di configurazione nel file * .wsgi o configurazione di Apache, a seconda di quale si sta utilizzando.

+0

Apache Config: DocumentRoot/SampleApp python-path =/cartella del progetto \t \t WSGIDaemonProcess var/www/html/MITLogger: /usr/local/lib/python3.4/dist-packages \t WSGIProcessGroup SampleApp \t WSGIScriptAlias ​​//cartella di progetto/MITLogger/MITLogger/wsgi.py \t \t \t \t necessitano di tutte concesso \t \t – user3823837

+0

wsgi.py: import os, sys # aggiungere il percorso del progetto hellodjango nel sys.path sys.path.append ('cartella/progetto/MITLogger') # aggiungere il percorso VIRTUALENV site-packages alle sys .path sys.path.append ('/ usr/local/lib/python3.4/dist-packages') os.environ.setdefault ("DJANGO_SETTINGS_MODULE", "MITLogger.settings") da django.core .wsgi import get_wsgi_application application = get_wsgi_application() – user3823837

0

Grazie ragazzi,

realtà ho risolto il problema io stesso questa mattina eseguendo il make install di mod_wsgi con .configure indicando python3.4.

Penso che tu avessi ragione Adam.

+0

Sì, sono abbastanza sicuro che la modifica di WSGIPythonHome non funziona. È comunque utile selezionare un virtualenv. Segna la mia risposta come corretta se lo ritieni così :-) –

+0

Per chiarire qualcosa - c'era un'altra risposta qui suggerendo di cambiare solo 'WSGIPythonHome'. 'WSGIPythonHome' sceglierà l'interprete ma funzionerà solo quando mod_wsgi è compilato rispetto alla stessa versione maggiore/minore di python a cui stai puntando. –