Условный импорт пакета

#python-3.x

#python-3.x

Вопрос:

Я пишу пакет, который управляет прошивкой наших устройств. Пакет переносит вызовы функций в общую библиотеку (Linux и Windows). Пакеты содержат множество модулей, которые инкапсулируют функции из оболочки разделяемой библиотеки. Пакет будет использоваться внутри компании и, возможно, клиентами.

Чтобы ускорить разработку, нам нужно создать макет оболочки, который эмулирует вызовы общей библиотеки. Вот пример структуры:

 import device_wrapper
import Module_A, ... Module_Z

class Device_0:
   def __init__(self):
       self.sub_device_0 = Module_A
       self.sub_device_n = Module_Z
 

Каждый модуль импортирует разные функции из оболочки. Пользователи могут использовать любые модули, а также классы «Devices».

Теперь я ищу способ использовать любые модули пакета, импортируя макет оболочки в некоторых случаях и импортируя реальную оболочку в других случаях. Что-то вроде:

 if mock_enable:
    import mock as device_wrapper
else:
    import device_wrapper
import Module_A, ... Module_Z

class Device_0:
   def __init__(self):
       self.sub_device_0 = Module_A
       self.sub_device_n = Module_Z
 

Где mock_enable будет импортироваться всеми другими модулями и будет модулем, который управляет импортом.

Есть ли лучший способ сделать то, что я хочу сделать? Я упускаю какие-либо подводные камни?

Комментарии:

1. Я просмотрел другие сообщения, думая о встроенных , глобальных переменных, но я не был уверен, что мне следует идти по этому пути.

2. Похоже, это стандартная вещь. Но убедитесь, что mock_enable он правильно инициализирован, прежде чем любой другой модуль импортирует его.