Estoy implementando una solución de graphql usando python, graphene y django y recibo el siguiente error de importación:
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_textNo estoy seguro de las versiones y si necesito importar un módulo adicional. Mi requisitos.txt es como:
graphene>=2.1,<3 graphene-django>=2.1,<3 graphql-core>=2.1,<3 graphql-relay==2.0.1 django-filter>=2¿Alguien ha tenido un problema similar y puede mirar las versiones que uso? Gracias
en django 4.0 no tenemos force_text
https://docs.djangoproject.com/en/4.0/ref/utils/#module-django.utils.encoding
en su lugar, cambie force_text a force_str
linux:
YOUR_VENV/lib/PYTHON_VERSION/site-packages/graphene_django/utils/utils.py
ventanas:
YOUR_VENV/lib/site-packages/graphene_django/utils/utils.py
from django.utils.encoding import force_textpara
from django.utils.encoding import force_stry
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 spara
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 sagregando lo siguiente a los requisitos.txt lo resolvió:
django<=3Basado en la respuesta dada por @Osman.
El problema parece estar ocurriendo con Django-4. Hasta que el PR se fusione, probablemente este parche mono podría funcionar (no probado en producción):
import django from django.utils.encoding import force_str django.utils.encoding.force_text = force_strPon esto en el archivo de entrada. Lo guardé en settings.py por el momento.
"force_text" se elimina de Django 4.0 :
Características eliminadas en 4.0
Pero graphene_django todavía usa "force_text" en utils.py .
utils.py:
from django.utils.encoding import force_text # Line 6 s = force_text(s) # Line 29Por lo tanto, debe reemplazar "force_text" con "force_str" como se muestra a continuación:
utils.py:
from django.utils.encoding import force_str# Line 6 s = force_str(s) # Line 29Estas son las rutas a utils.py para Linux y Windows :
Linux:
<your_venv>/lib/<python_version>/site-packages/graphene_django/utils/utils.py
Ventanas:
<su_venv>/lib/site-packages/graphene_django/utils/utils.py