Имитация пакета, который выживает после ... импорта - PullRequest
2 голосов
/ 20 июня 2020

В тестовом примере я хочу имитировать пакет 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

, чтобы обойти эту ошибку, но я не знаю, захочет ли пользователь завтра еще один модуль - и мне просто нужно будет добавить в список модулей, что не кажется хорошим выбором.

Есть ли подход, позволяющий имитировать этот модуль рекурсивно ?

...