python-dependency-injector icon indicating copy to clipboard operation
python-dependency-injector copied to clipboard

Django fails to start and throws TypeError

Open tkidwai-blink opened this issue 2 years ago • 0 comments
trafficstars

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

tkidwai-blink avatar May 26 '23 19:05 tkidwai-blink