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 в оригинальном репозитории, если вы считаете, что ваши изменения могут быть полезны другим.