Skip to content

Django fails to start and throws TypeError #712

Open
@tkidwai-blink

Description

@tkidwai-blink

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions