python-dependency-injector
python-dependency-injector copied to clipboard
How to debug RecursionError?
I have a nested structure of containers and I wanted to perform some refactoring by adding the new container structure first and then gradually removing the current structure.
However, DI decides to throw a RecursionError and I'd like to debug that. Can anyone help how to do it?
Here is the stacktrace so far.
I was not yet able to narrow the example down to a minimal working example, unfortunately.
Traceback (most recent call last):
File "src/dependency_injector/providers.pyx", line 4920, in dependency_injector.providers.deepcopy (src/dependency_injector/providers.c:97879)
File "/Users/cleancoder/.pyenv/versions/3.9.12/lib/python3.9/copy.py", line 146, in deepcopy
y = copier(x, memo)
File "/Users/cleancoder/.pyenv/versions/3.9.12/lib/python3.9/copy.py", line 210, in _deepcopy_tuple
y = [deepcopy(a, memo) for a in x]
File "/Users/cleancoder/.pyenv/versions/3.9.12/lib/python3.9/copy.py", line 210, in <listcomp>
y = [deepcopy(a, memo) for a in x]
File "/Users/cleancoder/.pyenv/versions/3.9.12/lib/python3.9/copy.py", line 153, in deepcopy
y = copier(memo)
File "src/dependency_injector/providers.pyx", line 798, in dependency_injector.providers.Dependency.__deepcopy__ (src/dependency_injector/providers.c:18613)
File "src/dependency_injector/providers.pyx", line 942, in dependency_injector.providers.Dependency._copy_parent (src/dependency_injector/providers.c:21090)
File "src/dependency_injector/providers.pyx", line 5043, in dependency_injector.providers._copy_parent (src/dependency_injector/providers.c:100267)
File "src/dependency_injector/providers.pyx", line 4920, in dependency_injector.providers.deepcopy (src/dependency_injector/providers.c:97879)
File "/Users/cleancoder/.pyenv/versions/3.9.12/lib/python3.9/copy.py", line 153, in deepcopy
y = copier(memo)
File "src/dependency_injector/providers.pyx", line 1046, in dependency_injector.providers.DependenciesContainer.__deepcopy__ (src/dependency_injector/providers.c:22854)
File "src/dependency_injector/providers.pyx", line 4920, in dependency_injector.providers.deepcopy (src/dependency_injector/providers.c:97879)
File "/Users/cleancoder/.pyenv/versions/3.9.12/lib/python3.9/copy.py", line 146, in deepcopy
y = copier(x, memo)
File "/Users/cleancoder/.pyenv/versions/3.9.12/lib/python3.9/copy.py", line 230, in _deepcopy_dict
y[deepcopy(key, memo)] = deepcopy(value, memo)
File "/Users/cleancoder/.pyenv/versions/3.9.12/lib/python3.9/copy.py", line 153, in deepcopy
y = copier(memo)
File "src/dependency_injector/providers.pyx", line 790, in dependency_injector.providers.Dependency.__deepcopy__ (src/dependency_injector/providers.c:18434)
RecursionError: maximum recursion depth exceeded while calling a Python object
Traceback (most recent call last):
File "src/dependency_injector/providers.pyx", line 4920, in dependency_injector.providers.deepcopy (src/dependency_injector/providers.c:97879)
File "/Users/cleancoder/.pyenv/versions/3.9.12/lib/python3.9/copy.py", line 146, in deepcopy
y = copier(x, memo)
File "/Users/cleancoder/.pyenv/versions/3.9.12/lib/python3.9/copy.py", line 210, in _deepcopy_tuple
y = [deepcopy(a, memo) for a in x]
File "/Users/cleancoder/.pyenv/versions/3.9.12/lib/python3.9/copy.py", line 210, in <listcomp>
y = [deepcopy(a, memo) for a in x]
File "/Users/cleancoder/.pyenv/versions/3.9.12/lib/python3.9/copy.py", line 153, in deepcopy
y = copier(memo)
File "src/dependency_injector/providers.pyx", line 798, in dependency_injector.providers.Dependency.__deepcopy__ (src/dependency_injector/providers.c:18613)
File "src/dependency_injector/providers.pyx", line 942, in dependency_injector.providers.Dependency._copy_parent (src/dependency_injector/providers.c:21090)
File "src/dependency_injector/providers.pyx", line 5043, in dependency_injector.providers._copy_parent (src/dependency_injector/providers.c:100267)
File "src/dependency_injector/providers.pyx", line 4920, in dependency_injector.providers.deepcopy (src/dependency_injector/providers.c:97879)
File "/Users/cleancoder/.pyenv/versions/3.9.12/lib/python3.9/copy.py", line 137, in deepcopy
d = id(x)
RecursionError: maximum recursion depth exceeded while calling a Python object
Traceback (most recent call last):
File "src/dependency_injector/providers.pyx", line 4920, in dependency_injector.providers.deepcopy (src/dependency_injector/providers.c:97879)
File "/Users/cleancoder/.pyenv/versions/3.9.12/lib/python3.9/copy.py", line 146, in deepcopy
y = copier(x, memo)
File "/Users/cleancoder/.pyenv/versions/3.9.12/lib/python3.9/copy.py", line 210, in _deepcopy_tuple
y = [deepcopy(a, memo) for a in x]
File "/Users/cleancoder/.pyenv/versions/3.9.12/lib/python3.9/copy.py", line 210, in <listcomp>
y = [deepcopy(a, memo) for a in x]
File "/Users/cleancoder/.pyenv/versions/3.9.12/lib/python3.9/copy.py", line 153, in deepcopy
y = copier(memo)
File "src/dependency_injector/providers.pyx", line 2832, in dependency_injector.providers.BaseSingleton.__deepcopy__ (src/dependency_injector/providers.c:55991)
File "src/dependency_injector/providers.pyx", line 5051, in dependency_injector.providers._memorized_duplicate (src/dependency_injector/providers.c:100488)
File "src/dependency_injector/providers.pyx", line 3034, in dependency_injector.providers.Singleton.__init__ (src/dependency_injector/providers.c:59024)
File "src/dependency_injector/providers.pyx", line 2812, in dependency_injector.providers.BaseSingleton.__init__ (src/dependency_injector/providers.c:55670)
File "src/dependency_injector/providers.pyx", line 2517, in dependency_injector.providers.Factory.__init__ (src/dependency_injector/providers.c:50156)
RecursionError: maximum recursion depth exceeded while calling a Python object
Traceback (most recent call last):
File "src/dependency_injector/providers.pyx", line 4920, in dependency_injector.providers.deepcopy (src/dependency_injector/providers.c:97879)
File "/Users/cleancoder/.pyenv/versions/3.9.12/lib/python3.9/copy.py", line 146, in deepcopy
y = copier(x, memo)
File "/Users/cleancoder/.pyenv/versions/3.9.12/lib/python3.9/copy.py", line 210, in _deepcopy_tuple
y = [deepcopy(a, memo) for a in x]
File "/Users/cleancoder/.pyenv/versions/3.9.12/lib/python3.9/copy.py", line 210, in <listcomp>
y = [deepcopy(a, memo) for a in x]
File "/Users/cleancoder/.pyenv/versions/3.9.12/lib/python3.9/copy.py", line 153, in deepcopy
y = copier(memo)
File "src/dependency_injector/providers.pyx", line 2832, in dependency_injector.providers.BaseSingleton.__deepcopy__ (src/dependency_injector/providers.c:55991)
File "src/dependency_injector/providers.pyx", line 5051, in dependency_injector.providers._memorized_duplicate (src/dependency_injector/providers.c:100488)
File "src/dependency_injector/providers.pyx", line 3264, in dependency_injector.providers.ContextLocalSingleton.__init__ (src/dependency_injector/providers.c:64048)
File "src/dependency_injector/providers.pyx", line 2812, in dependency_injector.providers.BaseSingleton.__init__ (src/dependency_injector/providers.c:55670)
File "src/dependency_injector/providers.pyx", line 2517, in dependency_injector.providers.Factory.__init__ (src/dependency_injector/providers.c:50156)
File "src/dependency_injector/providers.pyx", line 1195, in dependency_injector.providers.Callable.__init__ (src/dependency_injector/providers.c:25701)
File "src/dependency_injector/providers.pyx", line 1234, in dependency_injector.providers.Callable.set_provides (src/dependency_injector/providers.c:26287)
RecursionError: maximum recursion depth exceeded while calling a Python object
Traceback (most recent call last):
File "src/dependency_injector/providers.pyx", line 4920, in dependency_injector.providers.deepcopy (src/dependency_injector/providers.c:97879)
File "/Users/cleancoder/.pyenv/versions/3.9.12/lib/python3.9/copy.py", line 146, in deepcopy
y = copier(x, memo)
File "/Users/cleancoder/.pyenv/versions/3.9.12/lib/python3.9/copy.py", line 210, in _deepcopy_tuple
y = [deepcopy(a, memo) for a in x]
File "/Users/cleancoder/.pyenv/versions/3.9.12/lib/python3.9/copy.py", line 210, in <listcomp>
y = [deepcopy(a, memo) for a in x]
File "/Users/cleancoder/.pyenv/versions/3.9.12/lib/python3.9/copy.py", line 153, in deepcopy
y = copier(memo)
File "src/dependency_injector/providers.pyx", line 798, in dependency_injector.providers.Dependency.__deepcopy__ (src/dependency_injector/providers.c:18613)
File "src/dependency_injector/providers.pyx", line 942, in dependency_injector.providers.Dependency._copy_parent (src/dependency_injector/providers.c:21090)
File "src/dependency_injector/providers.pyx", line 5043, in dependency_injector.providers._copy_parent (src/dependency_injector/providers.c:100267)
File "src/dependency_injector/providers.pyx", line 4920, in dependency_injector.providers.deepcopy (src/dependency_injector/providers.c:97879)
File "/Users/cleancoder/.pyenv/versions/3.9.12/lib/python3.9/copy.py", line 153, in deepcopy
y = copier(memo)
File "src/dependency_injector/providers.pyx", line 1046, in dependency_injector.providers.DependenciesContainer.__deepcopy__ (src/dependency_injector/providers.c:22854)
File "src/dependency_injector/providers.pyx", line 4920, in dependency_injector.providers.deepcopy (src/dependency_injector/providers.c:97879)
File "/Users/cleancoder/.pyenv/versions/3.9.12/lib/python3.9/copy.py", line 146, in deepcopy
y = copier(x, memo)
File "/Users/cleancoder/.pyenv/versions/3.9.12/lib/python3.9/copy.py", line 230, in _deepcopy_dict
y[deepcopy(key, memo)] = deepcopy(value, memo)
File "/Users/cleancoder/.pyenv/versions/3.9.12/lib/python3.9/copy.py", line 153, in deepcopy
y = copier(memo)
File "src/dependency_injector/providers.pyx", line 794, in dependency_injector.providers.Dependency.__deepcopy__ (src/dependency_injector/providers.c:18495)
File "src/dependency_injector/providers.pyx", line 5051, in dependency_injector.providers._memorized_duplicate (src/dependency_injector/providers.c:100488)
File "src/dependency_injector/providers.pyx", line 779, in dependency_injector.providers.Dependency.__init__ (src/dependency_injector/providers.c:18269)
File "src/dependency_injector/providers.pyx", line 875, in dependency_injector.providers.Dependency.set_instance_of (src/dependency_injector/providers.c:20047)
RecursionError: maximum recursion depth exceeded in __instancecheck__
Traceback (most recent call last):
File "src/dependency_injector/providers.pyx", line 4920, in dependency_injector.providers.deepcopy (src/dependency_injector/providers.c:97879)
File "/Users/cleancoder/.pyenv/versions/3.9.12/lib/python3.9/copy.py", line 146, in deepcopy
y = copier(x, memo)
File "/Users/cleancoder/.pyenv/versions/3.9.12/lib/python3.9/copy.py", line 210, in _deepcopy_tuple
y = [deepcopy(a, memo) for a in x]
File "/Users/cleancoder/.pyenv/versions/3.9.12/lib/python3.9/copy.py", line 210, in <listcomp>
y = [deepcopy(a, memo) for a in x]
File "/Users/cleancoder/.pyenv/versions/3.9.12/lib/python3.9/copy.py", line 153, in deepcopy
y = copier(memo)
File "src/dependency_injector/providers.pyx", line 2832, in dependency_injector.providers.BaseSingleton.__deepcopy__ (src/dependency_injector/providers.c:55991)
File "src/dependency_injector/providers.pyx", line 5051, in dependency_injector.providers._memorized_duplicate (src/dependency_injector/providers.c:100488)
File "src/dependency_injector/providers.pyx", line 3264, in dependency_injector.providers.ContextLocalSingleton.__init__ (src/dependency_injector/providers.c:64048)
File "src/dependency_injector/providers.pyx", line 2812, in dependency_injector.providers.BaseSingleton.__init__ (src/dependency_injector/providers.c:55670)
File "src/dependency_injector/providers.pyx", line 2517, in dependency_injector.providers.Factory.__init__ (src/dependency_injector/providers.c:50156)
File "src/dependency_injector/providers.pyx", line 1195, in dependency_injector.providers.Callable.__init__ (src/dependency_injector/providers.c:25701)
File "src/dependency_injector/providers.pyx", line 1234, in dependency_injector.providers.Callable.set_provides (src/dependency_injector/providers.c:26287)
RecursionError: maximum recursion depth exceeded while calling a Python object
Traceback (most recent call last):
File "src/dependency_injector/providers.pyx", line 4920, in dependency_injector.providers.deepcopy (src/dependency_injector/providers.c:97879)
File "/Users/cleancoder/.pyenv/versions/3.9.12/lib/python3.9/copy.py", line 146, in deepcopy
y = copier(x, memo)
File "/Users/cleancoder/.pyenv/versions/3.9.12/lib/python3.9/copy.py", line 210, in _deepcopy_tuple
y = [deepcopy(a, memo) for a in x]
File "/Users/cleancoder/.pyenv/versions/3.9.12/lib/python3.9/copy.py", line 210, in <listcomp>
y = [deepcopy(a, memo) for a in x]
File "/Users/cleancoder/.pyenv/versions/3.9.12/lib/python3.9/copy.py", line 153, in deepcopy
y = copier(memo)
File "src/dependency_injector/providers.pyx", line 2832, in dependency_injector.providers.BaseSingleton.__deepcopy__ (src/dependency_injector/providers.c:55991)
File "src/dependency_injector/providers.pyx", line 5051, in dependency_injector.providers._memorized_duplicate (src/dependency_injector/providers.c:100488)
File "src/dependency_injector/providers.pyx", line 3264, in dependency_injector.providers.ContextLocalSingleton.__init__ (src/dependency_injector/providers.c:64048)
File "src/dependency_injector/providers.pyx", line 2812, in dependency_injector.providers.BaseSingleton.__init__ (src/dependency_injector/providers.c:55670)
File "src/dependency_injector/providers.pyx", line 2517, in dependency_injector.providers.Factory.__init__ (src/dependency_injector/providers.c:50156)
File "src/dependency_injector/providers.pyx", line 1195, in dependency_injector.providers.Callable.__init__ (src/dependency_injector/providers.c:25701)
File "src/dependency_injector/providers.pyx", line 1234, in dependency_injector.providers.Callable.set_provides (src/dependency_injector/providers.c:26287)
RecursionError: maximum recursion depth exceeded while calling a Python object
Traceback (most recent call last):
File "src/dependency_injector/providers.pyx", line 4920, in dependency_injector.providers.deepcopy (src/dependency_injector/providers.c:97879)
File "/Users/cleancoder/.pyenv/versions/3.9.12/lib/python3.9/copy.py", line 146, in deepcopy
y = copier(x, memo)
File "/Users/cleancoder/.pyenv/versions/3.9.12/lib/python3.9/copy.py", line 210, in _deepcopy_tuple
y = [deepcopy(a, memo) for a in x]
File "/Users/cleancoder/.pyenv/versions/3.9.12/lib/python3.9/copy.py", line 210, in <listcomp>
y = [deepcopy(a, memo) for a in x]
File "/Users/cleancoder/.pyenv/versions/3.9.12/lib/python3.9/copy.py", line 153, in deepcopy
y = copier(memo)
File "src/dependency_injector/providers.pyx", line 1047, in dependency_injector.providers.DependenciesContainer.__deepcopy__ (src/dependency_injector/providers.c:22913)
File "src/dependency_injector/providers.pyx", line 1155, in dependency_injector.providers.DependenciesContainer._copy_parent (src/dependency_injector/providers.c:24847)
File "src/dependency_injector/providers.pyx", line 5043, in dependency_injector.providers._copy_parent (src/dependency_injector/providers.c:100267)
File "src/dependency_injector/providers.pyx", line 4920, in dependency_injector.providers.deepcopy (src/dependency_injector/providers.c:97879)
File "/Users/cleancoder/.pyenv/versions/3.9.12/lib/python3.9/copy.py", line 153, in deepcopy
y = copier(memo)
File "src/dependency_injector/containers.pyx", line 118, in dependency_injector.containers.DynamicContainer.__deepcopy__ (src/dependency_injector/containers.c:5366)
File "src/dependency_injector/providers.pyx", line 4913, in dependency_injector.providers.deepcopy (src/dependency_injector/providers.c:98022)
File "src/dependency_injector/providers.pyx", line 4920, in dependency_injector.providers.deepcopy (src/dependency_injector/providers.c:97879)
File "/Users/cleancoder/.pyenv/versions/3.9.12/lib/python3.9/copy.py", line 153, in deepcopy
y = copier(memo)
File "src/dependency_injector/providers.pyx", line 537, in dependency_injector.providers.Self.__deepcopy__ (src/dependency_injector/providers.c:13488)
File "src/dependency_injector/providers.pyx", line 4920, in dependency_injector.providers.deepcopy (src/dependency_injector/providers.c:97879)
File "/Users/cleancoder/.pyenv/versions/3.9.12/lib/python3.9/copy.py", line 138, in deepcopy
y = memo.get(d, _nil)
RecursionError: maximum recursion depth exceeded in comparison
Traceback (most recent call last):
File "src/dependency_injector/providers.pyx", line 4920, in dependency_injector.providers.deepcopy (src/dependency_injector/providers.c:97879)
File "/Users/cleancoder/.pyenv/versions/3.9.12/lib/python3.9/copy.py", line 146, in deepcopy
y = copier(x, memo)
File "/Users/cleancoder/.pyenv/versions/3.9.12/lib/python3.9/copy.py", line 210, in _deepcopy_tuple
y = [deepcopy(a, memo) for a in x]
File "/Users/cleancoder/.pyenv/versions/3.9.12/lib/python3.9/copy.py", line 210, in <listcomp>
y = [deepcopy(a, memo) for a in x]
File "/Users/cleancoder/.pyenv/versions/3.9.12/lib/python3.9/copy.py", line 153, in deepcopy
y = copier(memo)
File "src/dependency_injector/providers.pyx", line 4021, in dependency_injector.providers.Container.__deepcopy__ (src/dependency_injector/providers.c:77945)
File "src/dependency_injector/providers.pyx", line 4920, in dependency_injector.providers.deepcopy (src/dependency_injector/providers.c:97879)
File "/Users/cleancoder/.pyenv/versions/3.9.12/lib/python3.9/copy.py", line 153, in deepcopy
y = copier(memo)
File "src/dependency_injector/containers.pyx", line 118, in dependency_injector.containers.DynamicContainer.__deepcopy__ (src/dependency_injector/containers.c:5366)
File "src/dependency_injector/providers.pyx", line 4913, in dependency_injector.providers.deepcopy (src/dependency_injector/providers.c:98022)
File "src/dependency_injector/providers.pyx", line 4920, in dependency_injector.providers.deepcopy (src/dependency_injector/providers.c:97879)
File "/Users/cleancoder/.pyenv/versions/3.9.12/lib/python3.9/copy.py", line 153, in deepcopy
y = copier(memo)
File "src/dependency_injector/providers.pyx", line 537, in dependency_injector.providers.Self.__deepcopy__ (src/dependency_injector/providers.c:13488)
File "src/dependency_injector/providers.pyx", line 4920, in dependency_injector.providers.deepcopy (src/dependency_injector/providers.c:97879)
File "/Users/cleancoder/.pyenv/versions/3.9.12/lib/python3.9/copy.py", line 138, in deepcopy
y = memo.get(d, _nil)
RecursionError: maximum recursion depth exceeded in comparison
test setup failed
@pytest.fixture
def web_container():
from app.core.cloudkitty.container import CloudKittyCore
from app.core.report.container import ReportCore
cores = Cores(report=ReportCore, cloudkitty=CloudKittyCore)
> return WebContainer(cores=cores)
Have same issue. Any updates or solutions?
I have the same issue, temporarily fixed this by increasing the recursion limit for container initialisation. Which is not a perfect solution, but it works.
sys.setrecursionlimit(2000)
container = Container()
sys.setrecursionlimit(1000)