Существует масса литературы о том, как делиться настройками конфигурации между файлами, модулями и т. Д., Но мой вопрос немного другой.
Каким питоническим способом поделиться настройкой конфигурации между пакетами Python, которые не знают друг о друге?
У меня есть сценарий, в котором из-за различных технических ограничений мне пришлось разбить код на 3 пакета.
У меня есть:
- пакет (ы) для приложения python 3 flask
- пакет (ы) для приложения scrapy web scraper (python 2.7)
- пакет базовых моделей БД, используемый # 1 и # 2
№1 и №2 знают о №3, но №3 не знает и не должен знать о №1 и №2.
Поскольку я использую Flask, я также использую Flask-SQLAlchemy. Flask-SQLAlchemy создает для вас симпатичный маленький объект db
, похожий на простой объект SQLAlchemy Base = declarative_base()
Base.
Это означает, что все объекты моей модели в №3 объявлены с использованием db.Model
. Но №3 не имеет самого объекта db
. Ему необходимо получить объект db
для пакета, который его использует, №1 или №2.
В основном в # 3 я хочу динамически импортировать db
через:
db = __import__(global_config_name_of_pkg, globals(), locals(), ['db'], -1).db
# 1 и # 2 будут отвечать за установку global_config_name_of_pkg
.
Я подумал о том, чтобы просто установить свойство на __builtins__
и получить значение оттуда, но это кажется очень непифоничным, и я также считаю, что имя изменилось между python 2 и 3 - __builtin__
vs __builtins__
.
Любые предложения о том, как этого добиться?
Спасибо!
Обновлять:
Почему этот вопрос отмечен как повторяющийся? Это не! Ссылка на вопрос о дублировании полностью отличается от вопроса, который я задаю.
Я вообще не спрашиваю, как совместно использовать модели SQLAlchemy между Flask и другими приложениями. Я уже отлично использую модели SQLAlchemy для разных «приложений».
Я просто предоставил это как контекст. Возможно, контекст, который я дал, скрывал мой вопрос, который был очень вторым предложением в моем сообщении.
Вопрос остается неизменным: Как с помощью Python делиться настройкой конфигурации между пакетами Python, которые не знают друг о друге?
Если вы планируете закрыть снова, пожалуйста, объясните.