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.

Вернуться на верх