django-stubs
django-stubs copied to clipboard
ImportError: cannot import name 'SetPasswordMixin' from partially initialized module 'django.contrib.auth.forms' (most likely due to a circular import)
Bug report
django_stubs_ext.monkeypatch() now tries to import django.contrib.auth.forms, but in some cases that breaks due to import cycles.
pyproject.toml
[project]
name = "django-stubs-test"
version = "0.1.0"
requires-python = ">=3.12"
dependencies = [
"django>=5.2.3",
"django-stubs>=5.2.1",
"django-stubs-ext>=5.2.1",
"mypy>=1.16.1",
]
[tool.mypy]
plugins = [
"mypy_django_plugin.main",
]
[tool.django-stubs]
django_settings_module = "my_settings"
my_settings.py
import django_stubs_ext
django_stubs_ext.monkeypatch()
AUTH_USER_MODEL = "my_app.MyUser"
INSTALLED_APPS = [
"django.contrib.auth",
"django.contrib.contenttypes",
"my_app",
]
my_app/__init__.py
my_app/models.py
from django.contrib.auth.models import AbstractUser
class MyUser(AbstractUser):
pass
test.py
import os
os.environ["DJANGO_SETTINGS_MODULE"] = "my_settings"
import django.contrib.auth.forms
Output
$ uv run test.py
Traceback (most recent call last):
File "/tmp/test/test.py", line 5, in <module>
import django.contrib.auth.forms
File "/tmp/test/.venv/lib/python3.13/site-packages/django/contrib/auth/forms.py", line 7, in <module>
from django.contrib.auth.models import User
File "/tmp/test/.venv/lib/python3.13/site-packages/django/contrib/auth/models.py", line 5, in <module>
from django.contrib.auth.base_user import AbstractBaseUser, BaseUserManager
File "/tmp/test/.venv/lib/python3.13/site-packages/django/contrib/auth/base_user.py", line 43, in <module>
class AbstractBaseUser(models.Model):
...<123 lines>...
)
File "/tmp/test/.venv/lib/python3.13/site-packages/django/db/models/base.py", line 131, in __new__
app_config = apps.get_containing_app_config(module)
File "/tmp/test/.venv/lib/python3.13/site-packages/django/apps/registry.py", line 260, in get_containing_app_config
self.check_apps_ready()
~~~~~~~~~~~~~~~~~~~~~^^
File "/tmp/test/.venv/lib/python3.13/site-packages/django/apps/registry.py", line 137, in check_apps_ready
settings.INSTALLED_APPS
File "/tmp/test/.venv/lib/python3.13/site-packages/django/conf/__init__.py", line 81, in __getattr__
self._setup(name)
~~~~~~~~~~~^^^^^^
File "/tmp/test/.venv/lib/python3.13/site-packages/django/conf/__init__.py", line 68, in _setup
self._wrapped = Settings(settings_module)
~~~~~~~~^^^^^^^^^^^^^^^^^
File "/tmp/test/.venv/lib/python3.13/site-packages/django/conf/__init__.py", line 166, in __init__
mod = importlib.import_module(self.SETTINGS_MODULE)
File "/nix/store/2mab9iiwhcqwk75qwvp3zv0bvbiaq6cs-python3-3.13.3/lib/python3.13/importlib/__init__.py", line 88, in import_module
return _bootstrap._gcd_import(name[level:], package, level)
~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/tmp/test/my_settings.py", line 2, in <module>
django_stubs_ext.monkeypatch()
~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^
File "/tmp/test/.venv/lib/python3.13/site-packages/django_stubs_ext/patch.py", line 129, in monkeypatch
_get_need_generic(),
~~~~~~~~~~~~~~~~~^^
File "/tmp/test/.venv/lib/python3.13/site-packages/django_stubs_ext/patch.py", line 107, in _get_need_generic
from django.contrib.auth.forms import SetPasswordMixin, SetUnusablePasswordMixin
ImportError: cannot import name 'SetPasswordMixin' from partially initialized module 'django.contrib.auth.forms' (most likely due to a circular import) (/tmp/test/.venv/lib/python3.13/site-packages/django/contrib/auth/forms.py)
System information
- OS: NixOS 25.11
pythonversion: 3.13.3djangoversion: 5.2.3mypyversion: 1.16.1django-stubsversion: 5.2.1django-stubs-extversion: 5.2.1