2013-07-07 7 views
15

Quindi, alla fine ho ceduto e ho afferrato South. Il problema è che, ogni volta che cerco di seguire il tutorial ed eseguireErrore di Django South: "non è stata trovata alcuna applicazione compatibile con" myapp ""

"python manage.py schemamigration myapp --initial" 

ottengo un errore

"There is no enabled application matching 'myapp'" 

--Things ho tried--

ho triple controllato le mie impostazioni file, l'esecuzione di Import South dalla shell di django non restituisce errori e ho aggiunto manage.py contenente la cartella a PYTHONPATH, oltre a wsgi.py e settings.py.

Ho eseguito python manage.py e python C: \ path \ to \ manage.py varianti, sono andato anche nella mia directory python e ho verificato che il sud si trovasse nella cartella dei pacchetti del sito. syncdb funziona bene, terminando con "non sincronizzato (usa le migrazioni)". python manage.py migrate le esecuzioni senza restituire errori, ma sembra che non abbia alcun effetto. Ho provato a eseguire il suddetto comando sia prima che dopo l'esecuzione di syncdb, che non ha alcun effetto sul risultato.

--Altri potenzialmente pertinente info--

Django 1.5.1, Python 2.7, nessun altre applicazioni esterne utilizzate, Windows 7 a 64 bit, pitone si aggiunge al percorso di Windows, Sud installato tramite python setup.py comando di installazione. Installazione completata con successo. Io non uso un virtualenv, e preferirei davvero evitare questo perché significherebbe un sacco di refactoring del setup del progetto corrente e del tempo sprecato. Ho intenzione di passare a una configurazione virtualenv in futuro, ma non ora.

Cosa sta succedendo? Come posso risolvere questo? Le ricerche in rete non hanno rivelato alcuna informazione valida, sono completamente in perdita ...

+13

è ''myapp'' in' INSTALLED_APPS'? esiste 'myapp/models.py'? – second

+0

non esiste e non dovrebbe esistere davvero. 'myapp' è il nome del progetto, è errato? allora il sud si applica solo a un'app specifica all'interno del progetto? Ho almeno 6 app personalizzate con i propri file model.py. Esiste un comando che dovrei eseguire affinché si applichi all'intero progetto? – Dreadicon

+1

@ secondi, penso di sapere cosa stavo facendo male ora. Stavo cercando di usare un comando pensato per un'applicazione django su un progetto django. Se non sbaglio, python manage.py migrate è il comando che fa la stessa cosa ma per l'intero progetto. Ho comunque bisogno di eseguire shemamigration per ogni app per inizializzarle? Se aggiungi una risposta formale, posso etichettarla come risposta migliore. Grazie per il tuo tempo e aiuto! – Dreadicon

risposta

3

Le migrazioni esistono in base all'app. ogni app può o non può avere le proprie migrazioni, ma è necessario crearle per ogni app in cui si desidera utilizzarle. (spesso tutte le applicazioni)

./manage.py migrate è una scorciatoia che corre migrazioni per tutte le applicazioni

3

Controllare una volta se hai inserito il nome dell'applicazione in INSTALLED_APPS in settings.py

7

Questo errore può essere fuorviante: si tratta generata non quando South tenta di importare l'app, ma quando tenta di ottenere il modulo models della app.

  • forse non può importare l'applicazione (perché non è stato aggiunto il suo nome alla INSTALLED_APPS)
  • forse non può importare il modulo models, perché il file models.py non esiste, o perché la directory models/ non lo fa contenere un __init__.py.

Sud non importa il modulo models. Invece, lascia quel lavoro a django.db.models.get_app('app_of_interest'), che in base alla sua docstring "Restituisce il modulo contenente i modelli per la specifica app_label." Il messaggio di errore generato da get_app è, infatti, diverso a seconda che non sia stata importata l'app o il modello, ma entrambe le eccezioni sono ImproperlyConfigured e lo script schemamigrations non ha un aspetto più approfondito.

Poiché South dice di accettare solo gli aggiornamenti di sicurezza (è entrato a far parte della vita privata con la funzionalità di migrazione di Django 1.7), non sto sottoponendo una correzione al suo codice base, ma documentando il problema qui.