Как решить "django.core.exceptions.ImproperlyConfigured: метки приложений не уникальны, дубликаты: foo" в Django 1.7?
При обновлении до Django 1.7 появляется следующее сообщение об ошибке ./manage.py
$ ./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
Какая проблема и как ее разрешить?
Ответы
Ответ 1
Проблема заключается в том, что при внесении изменений в приложения в Django 1.7 приложения должны иметь уникальный ярлык.
По умолчанию метка приложения - это имя пакета, поэтому, если у вас есть пакет с тем же именем, что и один из модулей вашего приложения (foo
в этом случае), вы попадете в эту ошибку.
Решение состоит в том, чтобы переопределить стандартную метку для вашего приложения и заставить эту конфигурацию загружать, добавив ее в __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)
и
# foo/__init__.py
default_app_config = 'full.python.path.to.your.app.foo.apps.FooConfig'
См. https://docs.djangoproject.com/en/1.7/ref/applications/#for-application-authors
Ответ 2
Я нашел для вас простое решение. В моем случае следующая строка добавляется дважды под INSTALLED_APPS,
'django.contrib.foo',
Удаленная одна строка исправляет проблему для меня.
Ответ 3
У меня была такая же ошибка - попробуйте следующее:
в INSTALLED_APPS, если вы включаете 'foo.apps.FooConfig', тогда Django уже знает, чтобы включить приложение foo в приложение, поэтому нет необходимости также включать 'foo'. Наличие как "foo", так и "foo.apps.FooConfig" в файле INSTALLED_APPS может быть источником вашей проблемы.
Ответ 4
Как therefromhere говорится, что это новая функция Django 1.7 которая добавляет своего рода "реестр приложений" , где приложения должны быть определены однозначно (и не только имеют разные шаблоны python).
Атрибут name
- это путь к питону (уникальный), но label
также должен быть уникальным. Например, если у вас есть приложение с именем "admin", вам нужно определить имя (name= 'python.path') и метку, которая также должна быть уникальной (label = 'my admin' или, как сказано, положить полный путь python, который всегда уникален).
Ответ 5
Ну, я создал приложение auth
, и я включил его в INSTALLED_APP
как src.auth
(потому что он в папке src
), и я получил эту ошибку, потому что есть приложение django.contrib.auth
. Поэтому я переименовал его как authentication
, и проблема была решена.
Ответ 6
У меня та же проблема.
Здесь моим именем приложения было chat, а в файле settings.py, под установленными приложениями я написал chat.apps.ChatConfig, в то время как я уже включил чат с именем приложения внизу. Когда я удалил chat.apps.ChatConfig, моя проблема была решена во время миграции. Эта ошибка может возникать из-за того же экземпляра, который вы могли дважды определить как имя приложения foo в файле settings.py. Я надеюсь, что это работает !!
Ответ 7
в моем случае в mysite settings.py, в переменной массива INSTALLED_APPS я дважды по ошибке поместил название приложения.
Ответ 8
У меня была почти такая же проблема.
'''File "/Users/apples/.local/share/virtualenvs/ecommerce-pOPGWC06/lib/python3.7/site-packages/django/apps/registry.py", line 95, in populate
"duplicates: %s" % app_config.label)
django.core.exceptions.ImproperlyConfigured: метки приложений не являются уникальными, дубликаты: auth '' '
Я установил Django.contrib.auth дважды. Я удалил один, и он работал хорошо.
Ответ 9
Возникла такая же проблема, прочитал settings.py в корневой папке, удалил все УСТАНОВЛЕННЫЕ ПРИЛОЖЕНИЯ, вызывающие конфликт... работает нормально. Придется переименовывать названия приложений
Ответ 10
Если вы хотите вернуться к старой версии, выполните команду
pip install django==1.6.7