Python3 import error smart_unicode django
Это моя первая попытка запустить скрипт py
У меня есть скрипт для автоматического импорта в android studio некоторых переводов. Я установил python 3.10.5 и pip и пытаюсь запустить скрипт. Я также установил Django 4.0.5
У меня есть этот импорт from django.utils.encoding import smart_str, smart_unicode
Когда я пытаюсь запустить его, я получаю ошибку
ImportError: cannot import name 'smart_unicode' from 'django.utils.encoding' (C:\Users\a816353\AppData\Local\Programs\Python\Python310\lib\site-packages\django\utils\encoding.py)
Я попробовал несколько предложений, но не могу понять, что делать.
Здесь история немного запутанная.
Еще в Python 2 в Django было две функции, smart_str
и smart_unicode
, которые соответствовали типам str
и unicode
в Python 2. В Python 2 str
представляла произвольно закодированную последовательность байтов, а unicode
- последовательность кодовых точек Юникода. Однако, когда появился Python 3, представление строк в Python изменилось. Встроенные модули str
и unicode
были заменены на bytes
и str
, где bytes
представляет произвольную последовательность байтов (то, что str
моделировалось в Python 2), а str
представляет строку Unicode (то, что unicode
моделировалось в Python 2). Соответственно, в Django 1.4 функции smart_str
и smart_unicode
переименованы в smart_bytes
и smart_text
соответственно. Для обратной совместимости, в Python 2 релизах Django 1.x функция smart_unicode
была оставлена как псевдоним для smart_text
и smart_str
как псевдоним для smart_bytes
. Между тем, в релизах Python 3 версии Django 1.x smart_unicode
был полностью исключен и smart_str
стал псевдонимом smart_text
.
Однако, в Python 3 релизах Django 1.x, smart_str
был сопоставлен с smart_text
вместо smart_bytes
. В итоге в Python 3 версии Django 1.x было три имени, smart_str
, smart_text
и smart_unicode
, которые ссылались на одну и ту же функцию.
(Более подробную информацию смотрите в Porting to Python 3 из документации Django).
Когда вышел Django 2.0, поддержка Python 2 была прекращена, поэтому название smart_unicode
полностью прекратило свое существование. В результате остались smart_str
и smart_text
как эквивалентные названия того, чем раньше был smart_unicode
.
В Django 3.0 smart_text
был устаревшим, а затем удален в Django 4.0. В наши дни smart_str
является эквивалентом того, чем раньше был smart_unicode
.
Поскольку код, с которым вы работаете, содержит ссылку на smart_unicode
, он, должно быть, был написан для Django 1.x. Если вы хотите, чтобы он работал как есть, вам нужно понизить версию Django. Но имейте в виду, что расширенная поддержка последней версии Django 1.x (v1.11) закончилась в апреле 2022 года, и что все выпуски Django 1.x до 1.11.17 поддерживают только Python 3.6 или ниже, который сам достиг конца срока службы в декабре 2021.
Если вы хотите пойти по пути обновления вашего кода для совместимости с современными версиями Django, правильной заменой для smart_unicode
будет smart_str
.