Замена в пакете python в Docker
GraphQL все еще не поддерживается в Django 4, поэтому для его использования мне нужно изменить строку:
"from django.utils.encoding import force_text"
to
"from django.utils.encoding import force_str as force_text"
в пакете
"VENV/lib/PYTHON_VERSION/site-packages/graphene_django/utils/utils.py"
Проблема возникает при использовании Docker, как я могу заменить эту строку при сборке контейнера?
Просто объедините RUN с sed-заменой в вашем докерфайле.
RUN pyver="python$(python --version | grep -Eo '[0-9]\.[0-9]')" && \
sed -i "s/import force\_text/import force\_str as force\_text/g" \
./lib/$pyver/site-packages/graphene_django/utils/utils.py
Замените <PATH_TO_utils.py> на путь к utils.py
Вместо того, чтобы вручную менять модуль python в site-пакетах, и предполагая, что нет другого способа исправить это (т.е. если все, что вам нужно, это чтобы force_text был определен в django.utils.encoding), вы также можете написать "обезьяний патч", т.е. патч времени выполнения модуля django.utils.encoding. Добавим что-то вроде этого в наш собственный код (непроверенный):
from django.utils import encoding
encoding.force_text = encoding.force_str
Позже, когда в нем не будет необходимости, этот патч следует удалить.