Open
Description
We recently refreshed dependencies of a django based application that uses dependency-injector v4.41.0. Whenever we try to go beyond django 3.1.14 (i.e. >= 3.2.0) we get the following error on startup of the application:
Exception in thread django-main-thread:
Traceback (most recent call last):
File "/Users/t.k/.pyenv/versions/3.9.0/lib/python3.9/threading.py", line 950, in _bootstrap_inner
self.run()
File "/Users/t.k/.pyenv/versions/3.9.0/lib/python3.9/threading.py", line 888, in run
self._target(*self._args, **self._kwargs)
File "/Users/t.k/Library/Caches/pypoetry/virtualenvs/prs-o9yqrpDn-py3.9/lib/python3.9/site-packages/django/utils/autoreload.py", line 64, in wrapper
fn(*args, **kwargs)
File "/Users/t.k/Library/Caches/pypoetry/virtualenvs/prs-o9yqrpDn-py3.9/lib/python3.9/site-packages/django/core/management/commands/runserver.py", line 110, in inner_run
autoreload.raise_last_exception()
File "/Users/t.k/Library/Caches/pypoetry/virtualenvs/prs-o9yqrpDn-py3.9/lib/python3.9/site-packages/django/utils/autoreload.py", line 87, in raise_last_exception
raise _exception[1]
File "/Users/t.k/Library/Caches/pypoetry/virtualenvs/prs-o9yqrpDn-py3.9/lib/python3.9/site-packages/django/core/management/__init__.py", line 375, in execute
autoreload.check_errors(django.setup)()
File "/Users/t.k/Library/Caches/pypoetry/virtualenvs/prs-o9yqrpDn-py3.9/lib/python3.9/site-packages/django/utils/autoreload.py", line 64, in wrapper
fn(*args, **kwargs)
File "/Users/t.k/Library/Caches/pypoetry/virtualenvs/prs-o9yqrpDn-py3.9/lib/python3.9/site-packages/django/__init__.py", line 24, in setup
apps.populate(settings.INSTALLED_APPS)
File "/Users/t.k/Library/Caches/pypoetry/virtualenvs/prs-o9yqrpDn-py3.9/lib/python3.9/site-packages/django/apps/registry.py", line 122, in populate
app_config.ready()
File "/Users/t.k/workspace/prs/api/apps.py", line 31, in ready
container = Container()
File "src/dependency_injector/containers.pyx", line 730, in dependency_injector.containers.DeclarativeContainer.__new__
File "src/dependency_injector/providers.pyx", line 4913, in dependency_injector.providers.deepcopy
File "src/dependency_injector/providers.pyx", line 4920, in dependency_injector.providers.deepcopy
File "/Users/t.k/.pyenv/versions/3.9.0/lib/python3.9/copy.py", line 146, in deepcopy
y = copier(x, memo)
File "/Users/t.k/.pyenv/versions/3.9.0/lib/python3.9/copy.py", line 230, in _deepcopy_dict
y[deepcopy(key, memo)] = deepcopy(value, memo)
File "/Users/t.k/.pyenv/versions/3.9.0/lib/python3.9/copy.py", line 153, in deepcopy
y = copier(memo)
File "src/dependency_injector/providers.pyx", line 2536, in dependency_injector.providers.Factory.__deepcopy__
File "src/dependency_injector/providers.pyx", line 4920, in dependency_injector.providers.deepcopy
File "/Users/t.k/.pyenv/versions/3.9.0/lib/python3.9/copy.py", line 146, in deepcopy
y = copier(x, memo)
File "/Users/t.k/.pyenv/versions/3.9.0/lib/python3.9/copy.py", line 230, in _deepcopy_dict
y[deepcopy(key, memo)] = deepcopy(value, memo)
File "/Users/t.k/.pyenv/versions/3.9.0/lib/python3.9/copy.py", line 172, in deepcopy
y = _reconstruct(x, memo, *rv)
File "/Users/t.k/.pyenv/versions/3.9.0/lib/python3.9/copy.py", line 270, in _reconstruct
state = deepcopy(state, memo)
File "/Users/t.k/.pyenv/versions/3.9.0/lib/python3.9/copy.py", line 146, in deepcopy
y = copier(x, memo)
File "/Users/t.k/.pyenv/versions/3.9.0/lib/python3.9/copy.py", line 230, in _deepcopy_dict
y[deepcopy(key, memo)] = deepcopy(value, memo)
File "/Users/t.k/.pyenv/versions/3.9.0/lib/python3.9/copy.py", line 172, in deepcopy
y = _reconstruct(x, memo, *rv)
File "/Users/t.k/.pyenv/versions/3.9.0/lib/python3.9/copy.py", line 270, in _reconstruct
state = deepcopy(state, memo)
File "/Users/t.k/.pyenv/versions/3.9.0/lib/python3.9/copy.py", line 146, in deepcopy
y = copier(x, memo)
File "/Users/t.k/.pyenv/versions/3.9.0/lib/python3.9/copy.py", line 230, in _deepcopy_dict
y[deepcopy(key, memo)] = deepcopy(value, memo)
File "/Users/t.k/.pyenv/versions/3.9.0/lib/python3.9/copy.py", line 172, in deepcopy
y = _reconstruct(x, memo, *rv)
File "/Users/t.k/.pyenv/versions/3.9.0/lib/python3.9/copy.py", line 270, in _reconstruct
state = deepcopy(state, memo)
File "/Users/t.k/.pyenv/versions/3.9.0/lib/python3.9/copy.py", line 146, in deepcopy
y = copier(x, memo)
File "/Users/t.k/.pyenv/versions/3.9.0/lib/python3.9/copy.py", line 230, in _deepcopy_dict
y[deepcopy(key, memo)] = deepcopy(value, memo)
File "/Users/t.k/.pyenv/versions/3.9.0/lib/python3.9/copy.py", line 161, in deepcopy
rv = reductor(4)
TypeError: cannot pickle '_thread.RLock' object
As highlighted in the trace above, it gets thrown from container = Container()
This particular trace is from a Mac running MacOS Ventura but it happens on our k8s deployments as well if we deploy with the same set of dependencies. Using python 3.9 which is supported by dependency-injector. Dependencies were built using poetry 1.3.0