Lỗi không thể nhập tên 'six' từ 'django.utils' khi sử dụng Django 3.0.0 phiên bản mới nhất


8

Hiện tại tôi đã nâng cấp phiên bản Django 2.2 lên 3.0 và đột nhiên gặp lỗi như bên dưới.

ImportError: không thể nhập tên 'six' từ 'django.utils'

Tôi đã kiểm tra Trac trở lại như dưới đây.

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)

Tôi đã kiểm tra trong thư mục Lib \ site-gói \ django \ utils và không tìm thấy và tập tin sáu ẩn nhưng vẫn từ Lib \ site-gói \ jsonfield \ encode.py chứa dòng từ django.utils nhập sáu, múi giờ cố gắng nhập sáu nhưng không thể tìm thấy.

Phiên bản trước của django chứa tệp six.py trong thư mục Lib \ site-gói \ django \ utils.

Bất kỳ ý tưởng làm thế nào để giải quyết điều này?


2
Đó là jsonfieldgói của bạn cần một mô-đun trong Django không thể tìm thấy nữa.
Willem Van Onsem

Bạn đang sử dụng DB nào?
Julien Kieffer

Như tài liệu trong ghi chú phát hành , "django.utils.six - Xóa sử dụng thư viện bị trả thù này hoặc chuyển sang sáu."
Sayse

@WillemVanOnsem - Tôi nên làm gì để khắc phục điều này? Bất kỳ ý tưởng bởi vì tôi đã cài đặt phiên bản mới nhất của tất cả các gói.
Mặt trăng

Câu trả lời:


6

Câu trả lời ngắn : bạn có thể muốn từ bỏ django-jsonfield.

Dựa trên truy nguyên, bạn đang sử dụng django-jsonfieldgói [GitHub] và đây là sự cố đã biết [vấn đề GitHub] . Nó phụ thuộc vào django.utils.sixmô-đun, nhưng mô-đun đó đã bị xóa trong .

Hiện tại, do đó bạn không thể sử dụng với và vì lần cam kết cuối cùng cho dự án này là từ tháng 10 năm 2017, có lẽ dự án không còn "hoạt động" nữa và do đó có thể mất nhiều thời gian (hoặc thậm chí không bao giờ) được sửa chữa. Người kế nhiệm của ([GitHub]) . Nó được làm tương thích với bởi một yêu cầu kéo vào tháng 10 (2019) [GitHub-pr] .


1
jsonfield2 có vẻ như là giải pháp tốt hơn nhiều ngay bây giờ. Cảm ơn cậu.
Mặt trăng

Xin lỗi, làm thế nào để từ bỏ django-jsonfield?
Phok Chanrithisak

Đối với bất cứ ai tìm thấy điều này ngày hôm nay, jsonfield2đã được lưu trữ và sáp nhập vào jsonfield( GitHub ).
Greg Kaleka

5

để sử dụng sáu mô-đun, bạn có thể cài đặt nó trực tiếp bằng pip và sau đó sửa đổi gói django-jsonfield cho phù hợp. Ý tôi là tìm các tập tin trong gói nơi có from django.utils import sixvà thay thế chúng bằng import six. Sau đó, nó sẽ được làm việc. Tôi gặp vấn đề tương tự khi sử dụng djongo với django 3.0. Tôi tìm thấy tập tin tương ứng và thay thế nó bằng gợi ý trên. Xin lưu ý rằng không bao giờ nên làm điều này nếu bạn đang làm việc trên một dự án cấp sản xuất hoặc cấp doanh nghiệp. Tôi đã làm điều đó cho dự án thú cưng của tôi.


cái này hiệu quả với tôi
Irfan Harun

Đây cũng là giải pháp cho tôi! Cảm ơn. Tôi hy vọng điều này không phá hủy ứng dụng của tôi trong việc sản xuất ở Heroku.
Jose Luis Quichimbo

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.