Почему я очень часто получаю ImportError при использовании django-constance?

Каждые несколько сотен тысяч запросов я вижу вот такое:

ImportError at /
cannot import name 'Config' from partially initialized module 'constance.base' (most likely due to a circular import) (/usr/local/lib/python3.9/site-packages/constance/base.py)

I cannot identify any rhyme or reason. It doesn't correspond with accessing constance admin, just randomly occurs. My best guess is it's something to do with the LazyObject in constance's __init__.py, and maybe random race-conditions in restarting expired gunicorn workers or something?!

Я использую:

  • Python 3.9.2
  • Django 3.2
  • django-constance = {extras = ["database"],version = "==2.8.*"}
  • "constance" and "constance.backends. database" in INSTALLED_APPS (at top)
  • CONSTANCE_BACKEND = "constance.backends.database.DatabaseBackend"
  • "constance.context_processors.config" in TEMPLATES[0]["OPTIONS"]["context_processors"]

All my code does is from constance import config and access config attributes in the standard way in python code and Django templates.

For what it's worth, we've been using django-constance on this site for years, but never saw this error until we upgraded to 2.8.0 (from 2.6.0). We were using Django 3.1 when it first appeared, but has also occurred since upgrading to 3.2.

Я не могу найти похожие отчеты об ошибках на https://github.com/jazzband/django-constance/

.

Есть идеи, что может быть причиной этого и как это решить?

Это была ошибка в constance, которая была решена в этом pull request.

Корень проблемы в том, что до этого pull request constance testsuite не запускал тесты на Django 3.2, что было исправлено, и изменения, вызвавшие вашу ошибку, также были выявлены и исправлены.

Это означает, что в constance's __init__.py теперь есть пункт if, отделяющий текущую обработку импорта в Django 3.2 от более старых версий Django.

Вернуться на верх