Ich versuche, eine Django-Anwendung zum Laufen zu bringen. Die Bibliotheken sind etwas veraltet (derzeit auf Django 1.4).

Ich habe es mehr oder weniger zum Laufen gebracht, als ich Python 2.6 ausprobiert habe, aber wenn ich mit Python 2.7 zu einer virtuellen Umgebung wechsle, wird folgende Fehlermeldung angezeigt:

Unhandled exception in thread started by <function wrapper at 0x7f057b17c320>
Traceback (most recent call last):
File "/home/colin/software/virtualenvs/barshool/lib/python2.7/site-packages/django/utils/autoreload.py", line 226, in wrapper
fn(*args, **kwargs)
File "/home/colin/software/virtualenvs/barshool/lib/python2.7/site-packages/django/core/management/commands/runserver.py", line 109, in inner_run
autoreload.raise_last_exception()
File "/home/colin/software/virtualenvs/barshool/lib/python2.7/site-packages/django/utils/autoreload.py", line 249, in raise_last_exception
six.reraise(*_exception)
File "/home/colin/software/virtualenvs/barshool/lib/python2.7/site-packages/django/utils/autoreload.py", line 226, in wrapper
fn(*args, **kwargs)
File "/home/colin/software/virtualenvs/barshool/lib/python2.7/site-packages/django/__init__.py", line 18, in setup
apps.populate(settings.INSTALLED_APPS)
File "/home/colin/software/virtualenvs/barshool/lib/python2.7/site-packages/django/apps/registry.py", line 85, in populate
app_config = AppConfig.create(entry)
File "/home/colin/software/virtualenvs/barshool/lib/python2.7/site-packages/django/apps/config.py", line 90, in create
module = import_module(entry)
File "/usr/lib64/python2.7/importlib/__init__.py", line 37, in import_module
__import__(name)
File "/home/colin/software/virtualenvs/barshool/lib/python2.7/site-packages/transmeta/__init__.py", line 7, in <module>
from django.utils.datastructures import SortedDict
ImportError: cannot import name SortedDict

Ich habe die virtuellen Envs mit den gleichen Anforderungsdateien eingerichtet.

Was ist der Unterschied zwischen den Versionen, die dies verursachen könnten?

5
wobbily_col 5 Jän. 2016 im 17:14

2 Antworten

Beste Antwort

SortedDict wurde in Django 1.9 entfernt. Stellen Sie sicher, dass Sie in der neuen virtuellen Umgebung dieselbe Version von Django installiert haben wie in der alten.

Wenn Ihr eigener Code SortedDict verwendet, besteht die langfristige Lösung darin, den Code so zu aktualisieren, dass collections.OrderedDict, das in Python 2.7 hinzugefügt wurde. In Ihrem Fall scheint der Importfehler von einer Drittanbieter-App zu stammen, die Sie aktualisieren oder ersetzen müssen, damit der Code mit Django 1.9 funktioniert.

11
Alasdair 5 Jän. 2016 im 14:29

Dies scheint ein anhaltender Fehler zu sein. Bedeutete das gleiche Problem bei der Arbeit mit django==1.11.1 und djangorestframework==3.9.1. Es war besonders djangorestframework (drf), das das sortedDict importierte, also habe ich stattdessen drf aktualisiert. Die aktuellste Version ist djangorestframework==3.10.3 von der Python Foundation. Dieses DRF-Upgrade hat meine Herausforderung gelöst.

Hinweis: Ich habe mit python 3.6.8 an Ubuntu 18.04.3 LTS gearbeitet (nur für den Fall, dass Sie diese Details benötigen).

2
MwamiTovi 19 Sept. 2019 im 10:47