IPython autoreload extensionを使用することをお勧めします。
./manage.py shell
In [1]: %load_ext autoreload
In [2]: %autoreload 2
そして今から、インポートされたすべてのモジュールは評価前に更新されます。
In [3]: from x import print_something
In [4]: print_something()
Out[4]: 'Something'
# Do changes in print_something method in x.py file.
In [5]: print_something()
Out[5]: 'Something else'
コマンドの前に何かがインポートされた場合にも機能し%load_ext autoreload
ます。
./manage.py shell
In [1]: from x import print_something
In [2]: print_something()
Out[2]: 'Something'
# Do changes in print_something method in x.py file.
In [3]: %load_ext autoreload
In [4]: %autoreload 2
In [5]: print_something()
Out[5]: 'Something else'
%aimport
コマンドと 3 つの autoreload 戦略を使用して、一部のインポートが更新されないようにすることもできます。
%autoreload
- すべてのモジュール (%aimport によって除外されたものを除く) が自動的に再ロードされるようになりました。
%オートリロード 0
%自動リロード 1
- 入力した Python コードを実行する前に、毎回 %aimport でインポートされたすべてのモジュールを再読み込みします。
%オートリロード 2
- 入力した Python コードを実行する前に、すべてのモジュール (%aimport によって除外されたものを除く) を毎回再読み込みします。
%aインポート
- 自動的にインポートされるモジュール、またはインポートされないモジュールを一覧表示します。
%aimport foo
- モジュール 'foo' をインポートし、%autoreload 1 で自動再ロードされるようにマークします。
%aimport -foo
- モジュール 'foo' を自動リロードしないようにマークします。
これは通常、私の使用には適していますが、いくつか注意事項があります。
- コード オブジェクトの置換は常に成功するとは限りません。クラス内の @property を通常のメソッドに変更したり、メソッドをメンバー変数に変更すると、問題が発生する可能性があります (ただし、古いオブジェクトのみ)。
- 再ロードされる前にモジュールから削除された機能 (モンキー パッチなどによって) はアップグレードされません。
- C 拡張モジュールは再ロードできないため、自動再ロードできません。