Python3导入错误smart_unicode django

wpx232ag  于 2023-01-04  发布在  Python
关注(0)|答案(1)|浏览(267)

这是我第一次尝试运行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)

我试过一些建议,但我想不出该怎么办。

t98cgbkg

t98cgbkg1#

TL;DR:您的代码是为Python 2和Django 1.x编写的,并且只能在其上运行。对于Python 3和所有后续版本的Django(2.0+),函数smart_unicode应该替换为smart_str,并且任何旧的smart_str应该替换为smart_bytes
django.utils.encodingsmart_*的函数在Django的历史中有了一些变化。
在Python 2中,Django有两个函数,smart_strsmart_unicode,它们对应于Python 2的strunicode类型。在Python 2中,str表示任意编码的字节序列,而unicode表示Unicode码点序列。然而,当Python 3沿着时,Python中的字符串表示方式发生了变化。内置的strunicodebytesstr所取代,其中bytes表示任意的字节序列(str在Python 2中建模),而str表示Unicode字符串(unicode在Python 2中建模的内容)。相应地,Django 1.4将函数smart_strsmart_unicode分别重命名为smart_bytessmart_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的别名。
Django 2.0发布后,不再支持Python 2,因此名称smart_unicode完全不存在了,这使得smart_strsmart_text成为了smart_unicode的等价名称。
在Django 3.0中smart_text被弃用,然后在Django 4.0中被移除。现在,smart_strsmart_unicode的适当等价物。
因为你使用的代码包含了对smart_unicode的引用,所以它一定是为Django 1.x编写的。如果你想让它工作,你需要降低Django的版本。但是请注意,对Django 1.x最新版本的扩展支持(v1.11)于2022年4月终止,Django 1.x在1.11.17之前的所有版本只支持Python 3.6或更低版本,而Python 3.6本身也于2021年12月终止。
如果你想升级你的代码以兼容最新版本的Django,smart_unicode的正确替代品是smart_str

相关问题