题 用于import_module的Django 1.9 ImportError


当试图运行时 runserver 要么 shell 运用 manage.py 我得到了 ImportError 例外。我正在使用Django 1.9。

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

33
2017-09-24 12:38


起源


请注意,Django 1.9刚刚达到alpha状态,不适合生产使用。除非你有充分的理由,否则请使用1.8。 - Daniel Roseman
谢谢Daniel。我目前只在本地开发中运行它,它更能帮助Django团队追踪阻碍稳定发布的问题。 - Matt
Django 1.9现在已经发布了。 - tutuca


答案:


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的一部分,如果不再使用它,它可以随时删除 - 即使在次要版本升级中也是如此。


58
2017-09-24 14:12



谢谢,我从未意识到 importlib 是一个内置模块!这是一个很好的教训,我下次应该深入挖掘。 - Matt


我用以下方法解决了这个问题:

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

20
2017-09-24 12:38



我可以在哪个文件中编写此代码? - Richardd
我可以在哪个文件中编写此代码?我将我的django从1.7更新到1.9。并停止工作。 - Richardd
谢谢。我安装了django-request来监控流量。我做了你在plugins.py和traffic.py中建议的更改,现在一切都很顺利。 - Jim Paul
嗨,我只是想问一下文件应该写这段代码吗? - James Reid
对我来说更安全的解决方案 - Kelvin Barsana