В настоящее время я работаю над абстрактным набором модулей для Python 2.7, который я отправлю как пакет python:
myabstractpkg
- abstract
- core
- logging
- ...
- nodes
- ...
Модули будут реализованы в совершенно другом наборе пакетов:
myimppkg
- implementation
- core
- logging
- ...
- nodes
- ...
Однако во время выполнения я хочу всегда выполнять импорт, как это, в моих инструментах, использующих реализованные модули:
from myabstractpkg.api import nodes
from myabstractpkg.api.core.logging import Logger
Таким образом, разработчик всегда импортирует данные из «виртуального» модуля API, который затем решает, куда на самом деле указать импортера.
Я знаю, что смогу как-то взломать его, изменив dict модулей:
from myimppkg import implementation
sys.modules["myabstractpkg.api"] = implementation
или делать хитрый импорт всего в __init__.py
из myabstractpackage.api
, но мне это кажется немного хрупким.
Интересно, есть ли у вас, ребята, какой-нибудь вклад в то, как лучше всего это сделать. Я мог бы быть на самом деле ужасным путем со всей этой концепцией переназначения модулей, так что если у вас, ребята, есть какие-нибудь более умные, более питонские решения для моей абстракции API, реализации, подхода к использованию, я хотел бы услышать их.