Мне нравится ipython, но я обнаружил проблему с% run: импортированные модули не перезагружаются, когда вызов% run вызывается повторно.
Предположим, что файл ex1.py содержит строки:
import ex2
ex2.x.append(1)
print ex2.x
И файл ex2.py содержит:
x = []
Теперь, запуская python ex1.py из командной строки, каждый раз печатает [1] каждый раз. Но вызов %run ex1.py
изнутри ipython многократно печатает [1], [1,1], [1,1,1] и т.д. Это связано с тем, что модуль ex2.py не перезагружается. Таким образом, у нас есть проблема: протокол ipython run- script не отражает поведение "реального мира".
Примечание:
%load_ext autoreload
%autoreload 2
не помогает. Эти строки будут загружены ex2.py, только если было внесено изменение в файл ex2.py. Если мы не вносим никаких изменений или не вносим изменений в ex1.py, мы получаем нежелательное поведение.
Есть ли способ заставить% run вести себя как командная строка здесь? Это похоже на реальный недостаток использования ipython в качестве среды тестирования для скриптов. (Или, может быть, мораль заключается в том, что модуль не должен записываться в другое пространство имен модулей?)