как динамически делиться глобальными переменными конфигурации между пакетами

Существует масса литературы о том, как делиться настройками конфигурации между файлами, модулями и т. Д., Но мой вопрос немного другой.

Каким питоническим способом поделиться настройкой конфигурации между пакетами Python, которые не знают друг о друге?

У меня есть сценарий, в котором из-за различных технических ограничений мне пришлось разбить код на 3 пакета.

У меня есть:

  1. пакет (ы) для приложения python 3 flask
  2. пакет (ы) для приложения scrapy web scraper (python 2.7)
  3. пакет базовых моделей БД, используемый # 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, которые не знают друг о друге?

Если вы планируете закрыть снова, пожалуйста, объясните.


person lostdorje    schedule 21.10.2015    source источник
comment
Попробовать Redis? pypi.python.org/pypi/redis   -  person Celeo    schedule 21.10.2015
comment
Ах, спасибо @Celeo! На самом деле это очень интересная идея. Я буду использовать Redis для других вещей. Само по себе, я думаю, это может быть немного излишним, если просто передать 1 или 2 переменные конфигурации, но, поскольку я все равно буду использовать redis, это довольно хорошая идея. На данный момент встроенные функции могут не быть питоническими, но они работают очень хорошо.   -  person lostdorje    schedule 22.10.2015