Я пишу апплет на python для сбора данных из научных инструментов и пытаюсь найти лучший способ управления «драйверами» моего устройства.
Каждый драйвер представлен отдельным модулем Python в пакете, который является моей программой. Каждый из них реализует некоторый стандартный интерфейс, но в основном это гигантский список команд (и отображений функций), специфичных для каждого устройства и шины. В долгосрочной перспективе (я пишу это для своей лабораторной группы и планирую поддерживать несколько десятков или около того устройств), я хочу не загружать их все сразу. Вместо этого во время выполнения я хочу прочитать список модулей в словаре / списке, а затем загружать их только тогда, когда они действительно необходимы.
Когда пользователь хочет использовать новое устройство, он выбирает драйвер для использования и передает имя подсистеме драйверов, которая затем проверяет, есть ли этот драйвер в списке загруженных модулей, и если это не так, он вызывает функцию __import__
и загружает драйвер, затем создает экземпляр объекта устройства с помощью драйвера и передает его пользователю для использования.
Мой вопрос: каков наилучший способ получить список всех модулей относительным способом? Что я имею в виду, если я знаю, что драйверы находятся в ..drivers
, есть ли способ получить аккуратный список модулей в этом подпакете? Для иллюстрации: обычно я просто вызываю from ..drivers import driver_name
для импорта модуля, но поскольку я не гарантирую, что в каталоге пакета, мы не можем просто использовать os
, чтобы получить список имен модулей .
В любом случае, любые идеи (даже, может быть, лучший способ выполнить то, что я хочу - загружаемые «драйверы») приветствуются.