В тестовом примере я хочу имитировать пакет keras
, где я не буду знать, как пользователь собирается импортировать этот пакет. Это означает, что мне нужно поддерживать
import keras
from keras import something
from keras.backend import otherthings
from keras.sub.subsub....module import somethingelse
. Я пытался использовать объект Mock
, чтобы сделать следующее:
from unittest.mock import Mock
m = Mock()
sys.modules['keras'] = m
import keras # Success
from keras import backend # Success
from keras.backend import a # Failed: ModuleNotFoundError: No module named 'keras.backend'; 'keras' is not a package
Я определенно могу добавить строку вроде
sys.modules['keras.backend'] = m
, чтобы обойти эту ошибку, но я не знаю, захочет ли пользователь завтра еще один модуль - и мне просто нужно будет добавить в список модулей, что не кажется хорошим выбором.
Есть ли подход, позволяющий имитировать этот модуль рекурсивно ?