Вы только что встретили одну из многих причин, по которым лучше никогда не импортировать объекты из «внутри» модулей - только из самих модулей (возможно, из пакетов). Мы сделали это правило частью нашего руководства по стилю в Google (опубликовано здесь ), и я от всей души рекомендую его каждому программисту Python.
Как говорится, вам нужно взять foomodule.foo, который вы только что заменили на макет, и вставить его в текущий модуль. Я не помню достаточно внутренней документации doctest, чтобы подтвердить,
>>> import foomodule
>>> foo = foomodule.foo
будет достаточно для этого - попробуйте, и если это не сработает, вместо этого сделайте
>>> import foomodule
>>> import sys
>>> sys.modules[__name__].foo = foomodule.foo
Да, это беспорядок, но причина этого беспорядка в том, что выглядит невинно from foomodule import foo
- избегайте этого, и ваша жизнь станет проще и продуктивнее; -).