从“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包

思维导图UEFI启动流程:从“开机上电”到“OS Loader”

python从mysql导出数据导excel

从git拉maven项目导包失败的总结