这是我第一次尝试运行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)
我试过一些建议,但我想不出该怎么办。
1条答案
按热度按时间t98cgbkg1#
TL;DR:您的代码是为Python 2和Django 1.x编写的,并且只能在其上运行。对于Python 3和所有后续版本的Django(2.0+),函数
smart_unicode
应该替换为smart_str
,并且任何旧的smart_str
应该替换为smart_bytes
。从
django.utils.encoding
到smart_*
的函数在Django的历史中有了一些变化。在Python 2中,Django有两个函数,
smart_str
和smart_unicode
,它们对应于Python 2的str
和unicode
类型。在Python 2中,str
表示任意编码的字节序列,而unicode
表示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
的别名。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年4月终止,Django 1.x在1.11.17之前的所有版本只支持Python 3.6或更低版本,而Python 3.6本身也于2021年12月终止。如果你想升级你的代码以兼容最新版本的Django,
smart_unicode
的正确替代品是smart_str
。