从“django.utils.encoding”导入错误“force_text”
Posted
技术标签:
【中文标题】从“django.utils.encoding”导入错误“force_text”【英文标题】:import error 'force_text' from 'django.utils.encoding' 【发布时间】:2022-01-19 17:23:56 【问题描述】:我正在使用 python、graphene 和 django 实现一个 graphql 解决方案,我收到以下导入错误:
Result: Failure Exception: ImportError: cannot import name 'force_text' from 'django.utils.encoding'
"/home/site/wwwroot/.python_packages/lib/site-packages/graphene_django/utils/utils.py", line 6, in <module> from django.utils.encoding import force_text
我不确定版本以及是否需要导入其他模块。 我的 requirements.txt 是这样的:
graphene>=2.1,<3
graphene-django>=2.1,<3
graphql-core>=2.1,<3
graphql-relay==2.0.1
django-filter>=2
有人遇到过类似的问题,可以看看我使用的版本吗? 谢谢
【问题讨论】:
这篇文章对你有帮助***.com/a/25178353/14457833 你使用的是什么 django 版本? 谢谢我也看过这篇文章。然而,它对我来说并不完全清楚。主要是我需要graphene_django。我需要降级 django 核心吗? 在 graphene_django.utils.utils.py 第 6 行是问题:from django.utils.encoding import force_text as django is not in my requirements.txt 我不清楚,哪个版本可以避免这个错误。 print(django.__version__) 返回 4.0 当我忽略了来自 howtographql.com 的教程的软件包版本号时,完全相同的错误。 +1 感谢您在我面前提问 :) 【参考方案1】:在 django 4.0 中我们没有 force_text
https://docs.djangoproject.com/en/4.0/ref/utils/#module-django.utils.encoding
将force_text
改为force_str
Linux:
YOUR_VENV/lib/PYTHON_VERSION/site-packages/graphene_django/utils/utils.py
窗口:
YOUR_VENV/lib/site-packages/graphene_django/utils/utils.py
from django.utils.encoding import force_text
到
from django.utils.encoding import force_str
和
def _camelize_django_str(s):
if isinstance(s, Promise):
s = force_text(s)
return to_camel_case(s) if isinstance(s, six.string_types) else s
到
def _camelize_django_str(s):
if isinstance(s, Promise):
s = force_str(s)
return to_camel_case(s) if isinstance(s, six.string_types) else s
【讨论】:
感谢您的回答。我可以在 venv 中本地更改它,但这不是一个有效的解决方案,因为我正在部署到云中,并且 venv 将在目标上创建。 你也可以在远程服务器上编辑【参考方案2】:将以下内容添加到 requirements.txt 解决了它:
django<=3
【讨论】:
【参考方案3】:基于@Osman 给出的answer。
问题似乎出现在 Django-4 上。在PR 被合并之前,这个monkeypatching 可能会起作用(未在产品中测试):
import django
from django.utils.encoding import force_str
django.utils.encoding.force_text = force_str
把它放在入口文件中。我暂时保存在settings.py中。
【讨论】:
这个入口文件是什么?以上是关于从“django.utils.encoding”导入错误“force_text”的主要内容,如果未能解决你的问题,请参考以下文章
十Django3.0学习之django.utils.encoding未发现 python_2_unicode_compatible包
django.utils.encoding未发现 python_2_unicode_compatible包
django.utils.encoding未发现 python_2_unicode_compatible包