Django: Я хочу переопределить ровно один модуль во вносимой библиотеке, чтобы исправить одну крошечную вещь

Есть ровно один модуль в библиотеке "pinax", который необходим для моего проекта, и который я хочу переопределить. И этот один модуль - site-packages/pinax/templatetags/templatetags/shorttimesince_tag.py, который ссылается на модуль django.utils.tzinfo, который больше не существует в текущем Django. (Он был заменен на django.utils.timezone.

Я хотел бы "переопределить" этот конкретный модуль, расположив все так, чтобы Python встретил его первым. Ну, я безуспешно пытался поместить это в wsgi файл приложения:

sys.path.insert(0, os.path.abspath(os.path.join(os.path.dirname(__file__), "overrides")))

Затем я создал дерево каталогов overrides/pinax/templatetags/templatetags с файлами __init__.py в каждом.

Я не думаю, что Django зайдет так далеко, прежде чем умрет с ошибкой импорта. Но я чувствую, что что-то в этом духе должно работать. Потому что я действительно не хочу, чтобы мне пришлось впитывать всю эту библиотеку в мое приложение, буквально только для того, чтобы изменить одну строчку исходного текста.

Есть идеи? Может, я просто лаю не на то дерево?

Проверил это с локальными файлами, и похоже, что когда вы переопределяете пакет, создавая пакет в override с тем же именем и __init__.py внутри, он переопределяет весь исходный пакет, а не только файлы, которые вы создали. Поэтому вам придется скопировать все файлы из этого пакета.

Если вы не укажете __init__.py, python не распознает ваш пакет и импортирует оригинальный.

Я думаю, что лучший способ здесь - это форк репо оригинального пакета, внести в него изменения и использовать форк в своем проекте. Также подумайте о создании PR в оригинальном репозитории, если вы считаете, что ваши изменения могут быть полезны другим.

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