私は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がリロードされないためです。したがって、問題があります。ipythonrun-scriptプロトコルは、「実世界」の動作を反映していません。
ノート:
%load_ext autoreload
%autoreload 2
助けにはなりません。これらの行は、ex2.pyファイルに変更が加えられた場合にのみex2.pyが再ロードされます。変更を加えない場合、またはex1.pyにのみ変更を加える場合、望ましくない動作が発生します。
ここで%runをコマンドラインのように動作させる方法はありますか?これは、スクリプトのテスト環境としてipythonを使用することの実際の欠陥のようです。(または、おそらく道徳は、モジュールが別のモジュールの名前空間に書き込んではいけないということですか?)