Я хотел бы обновить один модуль в пакете 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.