2009-06-07 17 views
6

Cercando di ottenere Django a lavorare con Apache, e sto ottenendo il seguente errore:Mod_python errore: ImportError: Impossibile importare le impostazioni

ImportError: Could not import settings 'MyDjangoApp.settings' (Is it on sys.path? Does it have syntax errors?): No module named MyDjangoApp.settings

mio Django app si trova in/home/utente/django/MyDjangoApp/

mio httpd.conf sezione Località assomiglia:

<Location "/MyDjangoApp/"> 
    SetHandler python-program 
    PythonHandler django.core.handlers.modpython 
    SetEnv DJANGO_SETTINGS_MODULE MKSearch.settings 
    PythonOption django.root /MyDjangoApp 
    PythonPath "['/home/user/django/MyDjangoApp/','/var/www'] + sys.path" 
    PythonDebug On 
</Location> 

Ti prego, dimmi come correggere la sezione posizione per fare Django funzionare?

risposta

11

Penso che mod_python cerchi le impostazioni nel modulo MKSearch che non esiste nella directory/home/user/django/MyDjangoApp. Prova ad aggiungere il dir genitore alla direttiva PYTHONPATH come di seguito:

<Location "/MyDjangoApp/"> 
    SetHandler python-program 
    PythonHandler django.core.handlers.modpython 
    SetEnv DJANGO_SETTINGS_MODULE MKSearch.settings 
    PythonOption django.root /MyDjangoApp 
    PythonPath "['/home/user/django/', '/home/user/django/MyDjangoApp,'/var/www'] + sys.path" 
    PythonDebug On 
</Location> 

o rimuovere il nome del modulo dal DJANGO_SETTINGS_MODULE env var come di seguito:

<Location "/MyDjangoApp/"> 
    SetHandler python-program 
    PythonHandler django.core.handlers.modpython 
    SetEnv DJANGO_SETTINGS_MODULE settings 
    PythonOption django.root /MyDjangoApp 
    PythonPath "['/home/user/django/MyDjangoApp,'/var/www'] + sys.path" 
    PythonDebug On 
</Location> 
+0

+1 I documenti di django ignorano la differenza tra "/ home/utente/django" (che consente "da MyDjangoApp import foo") e alternative. –

+0

rimuovere il nome del modulo di fronte alle impostazioni ha risolto il mio problema. Accidenti! – PhoebeB

4

Dando questa risposta per completezza - anche se il caso è stato diverso.

Ho chiamato il mio progetto django test. Beh, Django stava importando il test del modulo Python - che è un modulo per i test di regressione e non ha nulla a che fare con il mio progetto.

Questo errore si verifica se python trova un altro modulo con lo stesso nome del progetto django. Assegna un nome al tuo progetto in modo distinto oppure anteponi il percorso della directory padre della tua applicazione a sys.path.

+2

Esattamente quello che mi stava succedendo. Grazie! – nlaq

+0

Anche questo era il mio problema. Avevo un'area di prova chiamata test e il nome era in conflitto con il pacchetto integrato. Questo sembra abbastanza comune che Django probabilmente dovrebbe dare un messaggio di errore speciale per questo. –

-1

Il seguente esempio, situato nel mio file di configurazione Apache, funziona. Ho trovato molto difficile riuscire a far funzionare mod_python nonostante le buone risposte della gente. Per la maggior parte, i commenti che ho ricevuto dicono di usare mod_wsgi, invece di mod_python.

I commenti che ho visto incluso dal Boston Python Meetup tutti concorrono che mod_wsgi è più facile da usare. Nel mio caso su Red Hat EL 5 WS, il passaggio da mod_python non è pratico.

<Location /> 
     SetHandler python-program 
     PythonHandler django.core.handlers.modpython 
     SetEnv DJANGO_SETTINGS_MODULE settings 
     PythonOption django.root /home/amr/django/amr 
     PythonPath "['/home/amr/django', '/home/amr/django/amr', '/usr/local/lib 
/site-packages/django'] + sys.path" 
     PythonDebug On 
</Location> 
Problemi correlati