当前位置: 首页 > 知识库问答 >
问题:

获取错误无法从“django”导入名称“six”。使用Django 3.0时的utils。0最新版本

羊舌成周
2023-03-14

目前我已经将Django 2.2升级到3.0版本,突然出现如下错误。

ImportError:无法从“django”导入名称“six”。乌提尔斯

我已经检查了回溯如下。

Traceback (most recent call last):
  File "c:\Users\admin\.vscode\extensions\ms-python.python-2019.11.50794\pythonFiles\ptvsd_launcher.py", line 43, in <module>
    main(ptvsdArgs)
  File "c:\Users\admin\.vscode\extensions\ms-python.python-2019.11.50794\pythonFiles\lib\python\old_ptvsd\ptvsd\__main__.py", line 432, in main
    run()
  File "c:\Users\admin\.vscode\extensions\ms-python.python-2019.11.50794\pythonFiles\lib\python\old_ptvsd\ptvsd\__main__.py", line 316, in run_file
    runpy.run_path(target, run_name='__main__')
  File "C:\Python37\Lib\runpy.py", line 263, in run_path
    pkg_name=pkg_name, script_name=fname)
  File "C:\Python37\Lib\runpy.py", line 96, in _run_module_code
    mod_name, mod_spec, pkg_name, script_name)
  File "C:\Python37\Lib\runpy.py", line 85, in _run_code
    exec(code, run_globals)
  File "D:\production\myproject\erp_project\manage.py", line 10, in <module>
    execute_from_command_line(sys.argv)
  File "d:\production\myproject\venv\lib\site-packages\django\core\management\__init__.py", line 401, in execute_from_command_line
    utility.execute()
  File "d:\production\myproject\venv\lib\site-packages\django\core\management\__init__.py", line 377, in execute
    django.setup()
  File "d:\production\myproject\venv\lib\site-packages\django\__init__.py", line 24, in setup
    apps.populate(settings.INSTALLED_APPS)
  File "d:\production\myproject\venv\lib\site-packages\django\apps\registry.py", line 92, in populate
    app_config = AppConfig.create(entry)
  File "d:\production\myproject\venv\lib\site-packages\django\apps\config.py", line 90, in create
    module = import_module(entry)
  File "d:\production\myproject\venv\lib\importlib\__init__.py", line 127, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
  File "<frozen importlib._bootstrap>", line 1006, in _gcd_import
  File "<frozen importlib._bootstrap>", line 983, in _find_and_load
  File "<frozen importlib._bootstrap>", line 967, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 677, in _load_unlocked
  File "<frozen importlib._bootstrap_external>", line 728, in exec_module
  File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
  File "d:\production\myproject\venv\lib\site-packages\post_office\__init__.py", line 3, in <module>
    from .backends import EmailBackend
  File "d:\production\myproject\venv\lib\site-packages\post_office\backends.py", line 6, in <module>
    from .settings import get_default_priority
  File "d:\production\myproject\venv\lib\site-packages\post_office\settings.py", line 101, in <module>
    context_field_class = import_attribute(CONTEXT_FIELD_CLASS)
  File "d:\production\myproject\venv\lib\site-packages\post_office\compat.py", line 45, in import_attribute
    module = importlib.import_module(module_name)
  File "d:\production\myproject\venv\lib\importlib\__init__.py", line 127, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
  File "d:\production\myproject\venv\lib\site-packages\jsonfield\__init__.py", line 1, in <module>
    from .fields import JSONField, JSONCharField  # noqa
  File "d:\production\myproject\venv\lib\site-packages\jsonfield\fields.py", line 21, in <module>
    from .encoder import JSONEncoder
  File "d:\production\myproject\venv\lib\site-packages\jsonfield\encoder.py", line 2, in <module>
    from django.utils import six, timezone
ImportError: cannot import name 'six' from 'django.utils' (d:\production\myproject\venv\lib\site-packages\django\utils\__init__.py)

我已签入文件夹Lib\site packages\django\utils,但未找到和六个。py文件,但仍然来自Lib\site packages\jsonfield\encode。py包含来自django的行。utils导入六,时区尝试导入六,但无法找到。

django的早期版本包含六个。文件夹Lib\site packages\django\utils中的py文件。

知道怎么解决这个问题吗?

共有3个答案

郏经纬
2023-03-14

Django 3.0发行说明中指定的django.utils.six被删除。如果你需要它,建议使用pypi包代替

在您的情况下,jsonfield包可能会被原生Django的JSON字段替换。另一个解决方案是forkjsonfieldpackage自己解决问题,或者对项目的回购进行公关

李新霁
2023-03-14

为了使用six模块,您可以直接使用pip安装它,然后相应地修改django jsonfield包。我的意思是在包中找到来自django的文件。UTIL导入六个,并将其替换为导入六个。那么它应该会起作用。在django 3.0中使用djongo时,我遇到了同样的问题。我找到了相应的文件,并将其替换为上述建议。请注意,如果您从事的是生产级或企业级项目,则不建议这样做。我这样做是为了我的宠物项目。

松亦
2023-03-14

简而言之:您可能想要放弃django-jsonfield

根据回溯,您使用的是djangojsonfield包[GitHub],这是一个已知问题[GitHub问题]。这取决于django。乌提尔斯。六个模块,但该模块已在django-3.0中删除。

目前,您无法将django-3.0与django jsonfield一起使用,而且由于该项目的最后一次提交时间是2017年10月,因此该项目可能不再“活跃”,因此可能需要很长时间(甚至永远不会)才能修复。django jsonfield的继承者是jsonfield2([GitHub])。通过2019年10月的pull请求,它与django-3.0兼容[GitHub pr]。

 类似资料:
  • 已安装django smart selects(pip安装django smart selects),但不适用于django 3.0版。1. 我使用官方安装指南进行了配置。 安装片段 模型。派克 settings.py JQUERY\u URL=True

  • Django taggit在Django 3.0中不起作用,它在Django-2.2等早期版本中工作良好。因为它依赖于django没有的六个库。3.0中的utils

  • 问题内容: 目前,我已经将Django的版本从升级到,并且在调用时突然出现以下错误: 完整跟踪: 问题答案: Django 3.0.0发行说明指定删除了某些私有的Python 2兼容性API。其中有。 对于此错误,@ WillemVanOnsem特别指出该模块正在引用该模块。 对于遇到相同问题的其他人,查看stacktrace的最后一行上的文件路径可以帮助识别有问题的模块。我看到的另一个例子是:

  • 最近,我将Django framework的版本从升级到,在调用命令后,突然出现了以下异常: 重要错误:无法从django.utils导入名称六(/path-to-project/project/venv/lib/python3.7/site-包/django/utils/init.py) 完整跟踪: 类似问题: 我读了这个问题和这个django-3.0发行说明,但是这些资源帮不了我。

  • 嗨,有人能帮我解决'重要错误:不能导入名称网址'的问题吗?我已经按照教程在这里https://docs.djangoproject.com/en/1.9/intro/tutorial01/ 我尝试了另一个教程https://docs.djangoproject.com/zh-hans/2.0/ref/urls/#django.urls.include 但是他们都不工作我的Django版本是1.11

  • 我正在尝试运行Buildroot(2017.02)的scanpypi脚本-支持脚本,但是我得到了ImportError:cannotimport name get_importer。 回溯(最后一次调用):文件“/support/scripts/scanpypi”,第52行,导入setuptools文件“/usr/local/lib/python2.7/dist-packages/setuptoo