Я бы хотел обновить один модуль в пакете Python своей собственной версией модуля со следующими условиями:
- Я хочу, чтобы мой обновленный модуль жил за пределами исходного пакета (либо потому, что у меня нет доступа к источнику пакета, либо потому, что я хочу сохранить свои локальные модификации в отдельном репозитории и т. Д.).
- Я хочу
import
операторов, которые ссылаются на исходный пакет / модуль для разрешения моего локального модуля
Вот пример того, что я хотел бы сделать, используя специфику из django, потому что именно здесь у меня возникла эта проблема:
Скажи, что это структура моего проекта
django/
... the original, unadulterated django package ...
local_django/
conf/
settings.py
myproject/
__init__.py
myapp/
myfile.py
А потом в myfile.py
# These imports should fetch modules from the original django package
from django import models
from django.core.urlresolvers import reverse
# I would like this following import statement to grab a custom version of settings
# that I define in local_django/conf/settings.py
from django.conf import settings
def foo():
return settings.some_setting
Могу ли я совершить магию с оператором __import__
в myproject/__init__.py
, чтобы выполнить это? Есть ли более «питонный» способ добиться этого?
Обновление - Почему я хочу это сделать
Вот сценарий, в котором я думаю, что это имеет смысл.
- Я запускаю веб-сайт с поддержкой django на сервере, на котором django предустановлен во всем мире. В этом случае я не могу изменить фактический источник django.
- Мой проект django использует сторонние многократно используемые приложения, и я не хочу изменять
imports
во всех этих приложениях для импорта, например mycustomsettings
. Я хочу оставить многократно используемые приложения в блаженном неведении, что я изменил реализацию django.conf.settings.