2015-09-24 3 views
31

При попытке запустить runserver или shell с помощью manage.py Я получаю исключение ImportError. Я использую Django 1.9.Django 1.9 ImportError для import_module

ImportError: No module named 'django.utils.importlib' 
+5

Обратите внимание, что Django 1.9 только что достиг альфа-статуса и не подходит для использования в производстве. Используйте 1.8, если у вас нет веской причины. –

+2

Спасибо, Дэниэл. В настоящий момент я использую его только в локальном развитии, это больше помогает помочь команде Django отслеживать проблемы, которые сдерживают стабильную версию. – Matt

+1

Django 1.9 сейчас нет. – tutuca

ответ

54

django.utils.importlib представляет собой библиотеку совместимости для Python 2.6, когда все еще поддерживается. Он был устаревшим с Django 1.7, который отказался от поддержки Python 2.6 и удален в 1.9 за цикл устаревания.

Использование языка Python import_module функция вместо:

from importlib import import_module 

Причина вы можете импортировать его из django.utils.module_loading что importlib.import_module импортируется в этом модуле, это не потому что module_loading каким-либо образом определяет фактическую функцию.

С django.utils.module_loading.import_module не является частью общедоступного API, его можно удалить в любое время, если он больше не используется - даже при незначительном обновлении версии.

+0

Спасибо, я никогда не понимал, что 'importlib' был встроенным модулем! хороший урок, который я должен буду копать глубже в следующий раз. – Matt

19

Я решил это со следующим:

try: 
    # Django versions >= 1.9 
    from django.utils.module_loading import import_module 
except ImportError: 
    # Django versions < 1.9 
    from django.utils.importlib import import_module 
+3

В каком файле я могу написать этот код? – Richardd

+1

В каком файле я могу написать этот код? Я обновил свой django с 1.7 до 1.9. И прекратила работать. – Richardd

+0

выглядит как ошибка в бесконечной_пагинации или аналогичная – tutuca