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
問題は何ですか?どうすれば解決できますか?
問題は、Django 1.7でのアプリの変更により、アプリに一意のラベルが必要になることです。
デフォルトでは、アプリのラベルはパッケージ名であるため、アプリモジュールの1つと同じ名前のパッケージ(この場合は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 を参照してください
これに対する簡単な解決策を見つけました。私の場合、次の行がINSTALLED_APPSの下に2回追加されます。
'Django.contrib.foo',
1行削除すると、問題が修正されます。
私は同じエラーが発生しました-これを試してください:
iNSTALLED_APPSで、「foo.apps.FooConfig」を含める場合、Djangoはアプリケーションにfooアプリを含めることをすでに知っているため、「foo」を含める必要はありません。 INSTALLED_APPSの下の「foo」と「foo.apps.FooConfig」の両方が問題の原因である可能性があります。
therefromhere はこれが新しいDjango 1.7 feature であるため、アプリケーションを一意に決定する必要がある一種の「アプリレジストリ」を追加します。異なるpython pathes)を持つだけではありません。
name
属性はpythonパス(一意)ですが、label
も一意である必要があります。たとえば、「admin」という名前のアプリがある場合、名前(name = 'python.path)を定義する必要があります')およびラベルも一意でなければなりません(label =' my admin 'または前述のとおり、完全なpythonパスは常に一意です)。
さて、auth
アプリを作成し、INSTALLED_APP
のようなsrc.auth
に含めました(src
フォルダーにあるため)、このエラーが発生しました。 Django.contrib.auth
アプリでもあります。そこで、authentication
のように名前を変更し、問題を解決しました。
同じ問題が発生しました。ここで私のアプリ名はchatで、settings.pyで、インストール済みのアプリの下にchat.apps.ChatConfigを書きましたが、アプリ名のチャットは既に下部に含まれています。 chat.apps.ChatConfigを削除すると、マイニングの問題は移行中に解決されました。このエラーは、settings.pyでアプリ名fooを2回定義したのと同じインスタンスが原因である可能性があります。これがうまくいくことを願っています!!