2014-06-20 10 views
37

sull'aggiornamento a Django 1.7 che sto ottenendo il seguente messaggio di errore da ./manage.pyCome risolvere "django.core.exceptions.ImproperlyConfigured: le etichette delle applicazioni non sono univoci, duplicati: pippo" in Django 1.7?

$ ./manage.py 
Traceback (most recent call last): 
    File "./manage.py", line 16, in <module> 
    execute_from_command_line(sys.argv) 
    File "/home/johnc/.virtualenvs/myproj-django1.7/local/lib/python2.7/site-packages/django/core/management/__init__.py", line 427, in execute_from_command_line 
    utility.execute() 
    File "/home/johnc/.virtualenvs/myproj-django1.7/local/lib/python2.7/site-packages/django/core/management/__init__.py", line 391, in execute 
    django.setup() 
    File "/home/johnc/.virtualenvs/myproj-django1.7/local/lib/python2.7/site-packages/django/__init__.py", line 21, in setup 
    apps.populate(settings.INSTALLED_APPS) 
    File "/home/johnc/.virtualenvs/myproj-django1.7/local/lib/python2.7/site-packages/django/apps/registry.py", line 89, in populate 
    "duplicates: %s" % app_config.label) 
django.core.exceptions.ImproperlyConfigured: Application labels aren't unique, duplicates: foo 

Qual è il problema e come posso risolverlo?

risposta

61

Il problema è che con le modifiche alle app in Django 1.7, le app devono avere un'etichetta univoca.

Per impostazione predefinita l'etichetta dell'app è il nome del pacchetto, quindi se si ha un pacchetto con lo stesso nome di uno dei moduli dell'app (foo in questo caso), si verrà colpiti da questo errore.

La soluzione è sovrascrivere l'etichetta predefinita per l'app e forzare questa configurazione a caricarla aggiungendola a __init__.py.

# foo/apps.py 

from django.apps import AppConfig 

class FooConfig(AppConfig): 
    name = 'full.python.path.to.your.app.foo' 
    label = 'my.foo' # <-- this is the important line - change it to anything other than the default, which is the module name ('foo' in this case) 

e

# foo/__init__.py 

default_app_config = 'full.python.path.to.your.app.foo.apps.FooConfig' 

Vedi https://docs.djangoproject.com/en/1.7/ref/applications/#for-application-authors

+2

L'interrogante non ha accettato la sua risposta, ma è corretta. Una volta fatto ciò, posiziona "full.python.path.to.your.app.foo.apps.FooConfig" nel tuo 'INSTALLED_APPS' e tutto funziona come previsto. – Brett

+0

Non funziona per me –

+1

Volevo solo dirlo, una volta aggiunta l'etichetta, eseguire la migrazione in questo modo: python manage.py makemigrations my.foo – 82din

-19

Se si desidera eseguire la versione più vecchia, comando

pip install django==1.6.7 
+0

Ciò non fornisce una risposta. La domanda era: cosa c'è che non va nell'aggiornamento e come risolverlo in modo che l'aggiornamento funzioni. Il ripristino di una vecchia versione evita il problema, ma non lo risolve. – anaximander

+0

@anaximander - Stanno cercando di aiutare, quindi questa è una risposta, anche se è povera. Svuota il valore se non ti piace, ma non contrassegnarlo. Vedi la tua risposta è in un altro castello, quando una risposta non è una risposta: http://meta.stackexchange.com/questions/225370/your-answer-is-in-another-castle-when-is-an-answer- non-risposta – ArtOfWarfare

+2

In una domanda che dice "come faccio X in C#?" e qualcuno ha risposto "usa Java", che sarebbe considerato "non una risposta". Per lo stesso motivo, quando la domanda è "come posso risolvere questo problema nella versione 1.7", direi che "usare la versione 1.6.7" non è una risposta. La risposta dice "Se vuoi [tornare] a [una] versione precedente". La domanda è "come posso passare alla versione più recente". Penso che sia abbastanza evidente. – anaximander

3

Come therefromhere detto si tratta di una nuova Django 1.7 feature che aggiunge un tipo di "registro app" dove devono essere le applicazioni determinato in modo univoco (e non solo con percorsi Python diversi).

L'attributo name è il percorso pitone (unico), ma il label dovrebbe anche essere unico. Ad esempio, se hai un'app chiamata 'admin', devi definire il nome (name = 'python.path') e un'etichetta che deve essere anche unica (label = 'my admin' o come detto mettere il python completo percorso che è sempre unico).

37

Ho trovato una soluzione semplice per questo. Nel mio caso è stato aggiunto il seguente linea due volte sotto INSTALLED_APPS,

'django.contrib.foo', 

Rimosso una linea risolve il problema per me.

+0

bella osservazione ... è stato un errore stupido .. ha funzionato per me :) – jax

3

Ho avuto lo stesso errore - provare questo:

in INSTALLED_APPS, se si include 'foo.apps.FooConfig', poi Django sa già per includere l'applicazione foo nella domanda, non v'è quindi alcuna necessità includere anche 'pippo'. Avere sia 'foo' che 'foo.apps.FooConfig' sotto INSTALLED_APPS potrebbe essere la fonte del tuo problema.

1

Beh, ho creato auth app, e ho incluso nel INSTALLED_APP come src.auth (perché è nella cartella src) ed ho ottenuto questo errore, perché non v'è django.contrib.auth applicazione anche. Così l'ho ribattezzato come authentication e il problema è stato risolto.

Problemi correlati