使用最新版本的Django 3.0.0时出现错误,无法从'django.utils'导入名称'six'

时间:2019-12-05 08:40:51

标签: django python-3.x

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

  

ImportError:无法从“ django.utils”导入名称“ 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,但未找到文件和six.py文件,但仍来自Lib \ site-packages \ jsonfield \ encode.py,其中包含来自django.utils的行,导入了六个时区,试图导入六个但找不到。

django的早期版本,它在Lib \ site-packages \ django \ utils文件夹中包含six.py文件。

任何想法如何解决这个问题?

5 个答案:

答案 0 :(得分:3)

简短答案:您可能想放弃django-jsonfield

基于回溯,您正在使用django-jsonfield package [GitHub],而这是known issue [GitHub-issue]。它取决于django.utils.six模块,但是该模块已在中删除。

目前,您无法将一起使用,并且由于对该项目的最后一次提交是从2017年10月开始的,因此该项目可能不再那么“活跃”,并且因此可能需要很长时间(甚至永远不会)得到解决。 的后继者是 ([GitHub])

在10月(2019)的拉动请求中,它与[GitHub-pr]兼容。

答案 1 :(得分:1)

Django 3.0 release notedjango.utils.six中指定的A被删除。 如果需要,建议改用pypi packages

在您的情况下,jsonfield软件包可能会被本机Django's JSON Field取代。 另一个解决方案是自行打包jsonfield来解决您的问题,或者对项目的仓库进行PR

答案 2 :(得分:1)

为了使用这六个模块,您可以直接使用pip安装它,然后相应地修改django-jsonfield软件包。我的意思是在包含from django.utils import six的软件包中找到文件,并用import six替换它们。然后应该可以了。在django 3.0中使用djongo时,我遇到了相同的问题。我找到了相应的文件,并用上述建议替换了它。请注意,如果您在生产级或企业级项目中工作,则绝不建议这样做。我是为我的宠物项目做的。

答案 3 :(得分:0)

简短答案 在Django 3.0中只需安装六个

char* t

并像这样使用它:

pip install six

答案 4 :(得分:0)

在我的情况下,是django-haystac导致了此错误。 它帮助我将pip包升级到了最新的Beta。

Errno::ENOENT: No such file or directory @ rb_file_s_stat - /tmp/webdriver-rb-profilecopy20200815-25523-ie6apk/lock
from /home/burak/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/rubyzip-2.2.0/lib/zip/entry.rb:405:in `stat'