Помилка оновлення Django до 1.9 "AppRegistryNotReady: програми ще не завантажені".


93

Під час оновлення до django 1.9 з 1.8 я отримав цю помилку. Я перевіряв відповіді на подібні запитання, але не думав, що це проблема з будь-якими сторонніми пакетами чи програмами.

Traceback (most recent call last):
File "manage.py", line 10, in <module> execute_from_command_line(sys.argv)
File "/home/kishore/.virtualenvs/andone/local/lib/python2.7/site-packages/django/core/management/__init__.py", line 350, in execute_from_command_line
utility.execute()
File "/home/kishore/.virtualenvs/andone/local/lib/python2.7/site-packages/django/core/management/__init__.py", line 342, in execute
self.fetch_command(subcommand).run_from_argv(self.argv)
File "/home/kishore/.virtualenvs/andone/local/lib/python2.7/site-packages/django/core/management/__init__.py", line 176, in fetch_command
commands = get_commands()
File "/home/kishore/.virtualenvs/andone/local/lib/python2.7/site-packages/django/utils/lru_cache.py", line 100, in wrapper
result = user_function(*args, **kwds)
File "/home/kishore/.virtualenvs/andone/local/lib/python2.7/site-packages/django/core/management/__init__.py", line 71, in get_commands
for app_config in reversed(list(apps.get_app_configs())):
File "/home/kishore/.virtualenvs/andone/local/lib/python2.7/site-packages/django/apps/registry.py", line 137, in get_app_configs
self.check_apps_ready()
File "/home/kishore/.virtualenvs/andone/local/lib/python2.7/site-packages/django/apps/registry.py", line 124, in check_apps_ready
raise AppRegistryNotReady("Apps aren't loaded yet.")
django.core.exceptions.AppRegistryNotReady: Apps aren't loaded yet.

Я змінив встановлені програми для "django.contrib.auth".


1
ви використовуєте будь-яку сторонній додаток? Поділіться своїми налаштуваннями.py
utkbansal

Я використовую багато сторонніх додатків, але я вважаю, що ця помилка викликана "django / apps / registry.py", а не будь-якими іншими програмами в пакетах веб-сайтів.
Kishore K

1
Я зіткнувся з подібною проблемою з django-crispy-form, оскільки ibrary ще не підтримує 1.9. Отже, це може бути непідтримувана програма.
utkbansal

1
Я не використовую цей пакет. На жаль, якщо я помиляюся, якщо це пов’язано з якими-небудь пакетами, трасування буде вказувати на цю програму в пакетах веб-сайтів, так?
Kishore K

Той самий платіж не підтримує 1.9
GrvTyagi

Відповіді:


125

Спробуйте додати ці рядки у верхній частині файлу налаштувань:

import django
django.setup()

І якщо це не допоможе вам спробувати видалити сторонні програми зі списку встановлених програм по одному.


8
Я спробував, але я отримав цю помилку "django.core.exceptions.ImproperlyConfigured: Параметр SECRET_KEY не повинен бути порожнім." Хоча я маю SECRET_KEY у файлі налаштувань.
Kishore K

11
Спробуйте оголосити SECRET_KEY ДО згаданих рядків, щось на зразок: SECRET_KEY = 'МОЙ СЕКРЕТНИЙ КЛЮЧ' import django django.setup () він працював у мене .... тепер з іншою помилкою :)
Дуда Ногейра

1
Це чудова відповідь на запитання: "Як отримати доступ до об'єктів моделі Django із самостійного сценарію?" :-) Перед тим, як запустити наведений вище код, вам потрібно буде зробити: os.environ.setdefault ("DJANGO_SETTINGS_MODULE", "your.settings").
AdvilUser

1
Не працював з налаштуваннями, але працює з моїм автономним сценарієм. Цей виняток також трапляється, якщо ви забули викликати django.setup () в автономному сценарії Python. docs.djangoproject.com/en/1.10/ref/applications/…
Андре Дуарте,

30
django.setup()призначений для використання в окремих сценаріях. Ви не повинні ставити це в налаштуваннях
Alasdair,

37

Я призначив би спеціальну функцію, написану в одному з моїх __init__.pyфайлів моделей . Це спричинило помилку. Коли я перемістив цю функцію, __init__.pyвона працювала.


3
Те саме тут, переміщуючи це також фіксовано.
Брачамул

Варто зазначити, що коментовані функції у цьому файлі також можуть спричинити цю помилку.
B-Tron автоботів

25

Моя проблема полягала в тому, що я намагався імпортувати модель Django перед викликом django.setup()

Це спрацювало для мене:

import django
django.setup()

from myapp.models import MyModel

Наведений вище сценарій знаходиться в кореневій папці проекту.


Я стикався з цією проблемою під час запуску сценарію, це вирішило.
майже новачок

14

У моєму випадку сталася помилка , коли я зробив python manage.py makemigrationsнаDjango 2.0.6 .

Рішенням було запуститись python manage.py runserverі побачити фактичну помилку (яка була просто відсутнім змінною середовища).


13

Ця помилка може статися , коли ви додаєте додаток в INSTALLED_APPS в settings.pyфайлі , але ви не маєте , що програма встановлена на вашому комп'ютері. У вас є два рішення:

  1. Installцей додаток використовує менеджери пакетів, як pipв ubuntu
  2. Або викоментуйте встановлену програму у settings.pyфайлі

Ця помилка може також виникнути, якщо ви перебуваєте не у своєму, virtual environmentякий ви, можливо, створили для свого проекту.


5

Спробуйте видалити весь settings.LOGGINGdictConfig і перезавантажте сервер. Якщо це працює, перепишіть налаштування відповідно до документації v1.9.

https://docs.djangoproject.com/en/1.9/topics/logging/#examples


Дякую, це спрацювало. Для мене я використовував налаштування файлів Linux на Windows. Отже, /var/logіснує шлях
dint до

5

Для мене проблема виникла в тому, що я імпортував додаток, в INSTALLED_APPSякому сам імпортував модель у своєму__init__.py файлі

Я мав :

settings.py

INSTALLED_APPS = [
    ...
    'myapp',
    ...
]

myapp.__init__.py

from django.contrib.sites.models import Site

коментуючи import modelsв myapp.__init__.pyзмусило це працювати:

# from django.contrib.sites.models import Site

У мене схожа проблема. Але мені потрібен імпорт у моєму випадку. Як би ви це зробили?
JohnnyQ

Ви завжди можете здійснити рефакторинг, щоб уникнути імпорту моделей з init . Варіантом, який би точно працював, буде рефакторинг файлів, що імпортують вашу програму, але це можуть бути досить серйозні зміни. Зрештою, це те, що мені довелося зробити!
Albyorix,

Те саме питання, що і @JohnnyQ. Працює добре в 1.8, але переривається в 1.9. Чи є десь навколо відповідна документація? Виникає виключення з - за імпорт Користувача з django.contrib.auth.models в моєму випадку
Винод

Запитав про це в окремому питанні тут stackoverflow.com/questions/59927122/… і отримав відповідь. Суть, не інший шлях, крім рефактора
Вінод,

4

django.setup () вгорі не буде працювати, поки ви явно запускаєте скрипт. Моя проблема вирішена, коли я додав це внизу файлу налаштувань

BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
import sys
if BASE_DIR not in sys.path:
    sys.path.append(BASE_DIR)
os.environ['DJANGO_SETTINGS_MODULE'] =  "igp_lrpe.settings"
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "igp_lrpe.settings")
import django
django.setup()

Я використовую оболонку Pycharm і тип import djangoі django.setup(). Проблема вирішена.
Сієд Хасан Мусаві

2

Для мене коментування

'grappelli.dashboard',
'grappelli',

у INSTALLED_APPS працював


Для мене це було просто те, що я випадково мав 'one_third_pary_app,'замість 'one_third_pary_app',(зверніть увагу на позицію ,)
J0ANMM

2

Я отримую цю помилку при спробі запустити test.py(не повні сценарії, я не хочу використовувати python manage.py test)

і наступний метод працює для мене.

import os
import django
if 'env setting':
    os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'YourRoot.settings')
    django.setup()
from django.test import TestCase
...

class SomeTest(TestCase):
    def test_one(self):  # <-- Now, I can run this function by PyCharm
        ...

    def test_two(self):
        ...

1

Моєю проблемою було: django-reversion> = 1.8.7, <1.9

для django 1.9.7 слід використовувати: django-reversion == 1.10.0

Мені було оновлено django-cms 3.2 до 3.3, і я знайшов його, коментуючи програми, а потім коментуючи назад.

Правильна відповідь тут: https://stackoverflow.com/a/34040556/2837890


1

Ця проблема також спостерігається у випадку невідповідності settings.py за неправильне написання INSTALLED_APPS, перевірте, чи правильно ви включили програми та розділили знаком ",".



1

Я помістив Userімпорт у settingsфайл для управління маркером виклику rest, таким чином

# settings.py
from django.contrib.auth.models import User
def jwt_get_username_from_payload_handler(payload):
   ....

JWT_AUTH = {
    'JWT_PAYLOAD_GET_USERNAME_HANDLER': jwt_get_username_from_payload_handler,
    'JWT_PUBLIC_KEY': PUBLIC_KEY,
    'JWT_ALGORITHM': 'RS256',
    'JWT_AUDIENCE': API_IDENTIFIER,
    'JWT_ISSUER': JWT_ISSUER,
    'JWT_AUTH_HEADER_PREFIX': 'Bearer',
}
REST_FRAMEWORK = {
    'DEFAULT_PERMISSION_CLASSES': (
        'rest_framework.permissions.IsAuthenticated',
    ),
    'DEFAULT_AUTHENTICATION_CLASSES': (
       'rest_framework_jwt.authentication.JSONWebTokenAuthentication',
    ),
}

Тому що на той момент бібліотеки Django ще не готові. Тому я помістив функцію importвсередину, і вона почала працювати. Функцію потрібно викликати після запуску сервера


0

У моєму випадку одне з моїх налаштувань "CORS_ORIGIN_WHITELIST" було встановлено у файлі settings.py, але в моєму файлі .env було недоступно. Тож я запропоную вам перевірити ваші налаштування, особливо ті, що пов’язані з .env


0

Як вже говорили інші, це може бути спричинено тим, що ви не встановили програму, вказану в INSTALLED_APPS .

У моєму випадку manage.py була зроблена спроба зареєструвати виняток, що призвело до спроби зробити його невдалим через те, що програма ще не ініціалізована. Коментуючи exceptпункт у manage.pyвинятку, він відображався без спеціального відображення, уникаючи заплутаної помилки.

# Temporarily commenting out the log statement.
#try:
    execute_from_command_line(sys.argv)
#except Exception as e:
#    log.error('Admin Command Error: %s', ' '.join(sys.argv), exc_info=sys.exc_info())
#    raise e

0

Я спробував багато речей, але лише знизивши версію Django до версії 1.8.18, ця проблема була виправлена ​​для мене:

pip install django==1.8.18

Це одна із встановлених програм, яка не працює, але я не зміг знайти, яку саме.


0

Я отримую цю помилку при спробі запустити:

python manage.py makemigrations

я спробував стільки речей і зрозумів, що додав кілька посилань на "settings.py" - "INSTALLED_APPS"

Тільки переконайтеся, що те, що ви там пишете, є правильним. Моєю помилкою було ".model". замість ".app."

Виправлено цю помилку, і вона працює зараз.


-1

Пізно на вечірку, але граппелі теж були причиною моєї помилки. Я знайшов сумісну версію на pypi, і це мені виправило.


-1

Спробуйте активувати віртуальну env. У моєму випадку, використовуючи інструмент командного рядка git:

source scripts/activate

Вирішує мою проблему.


-1

Виникла ця помилка під час спроби отримати доступ до об’єктів моделі в apps.py:

class QuizConfig(AppConfig):
name = 'quiz'

def ready(self):
    print('===============> Django just started....')
    questions_by_category = Question.objects.filter(category=2) # <=== Guilty line of code.

Спроба отримати доступ Questionдо того, як програма завантажила клас моделі, спричинила для мене помилку.


Чи модель, Questionвизначена в models.py цього AppConfig?
Gustavo_fringe

Так, це визначено там
Ojonugwa Jude Ochalifu

-2

Якщо ваші файли settings.py заповнені правильно, ви можете спробувати надіслати файли manage.py, зателефонуйте danjgo.setup () в основний метод. Потім запустіть manage.py, нарешті знову запустіть проект, проблема може зникнути.


-2

У модулі "адміністратор" вашого пакету додатків зареєструйте всі бази даних, створені в модулі "моделі" пакета.

Припустимо, у вас є клас бази даних, визначений в модулі "models" як:

class myDb1(models.Model):
    someField= models.Charfiled(max_length=100)

тому ви повинні зареєструвати це в модулі адміністратора як:

from .models import myDb1
admin.site.register(myDb1)

Сподіваюся, це вирішить помилку.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.