Замена в пакете 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 

Позже, когда в нем не будет необходимости, этот патч следует удалить.

Вернуться на верх