私は django IPython-shell で作業しています。これは で開始できますmanage.py shell。テストのためにシェルにextern関数をロードすると、すべて問題ありません。しかし、関数に変更を加えると、シェルにはまだ古いバージョンの関数が残っています。新しいインポートを行っても。
関数の実際のバージョンをリロードする方法を知っている人はいますか?
よろしくお願いします!
編集:私はWindowsを使用しています-それが違いを生む場合。
モジュールを sys.modules から削除して再読み込みし、新しいインポートを作成します。
import sys
sys.modules.pop('your.module')
import your.module
# or
from your.module import your_function
目的のモジュールで組み込みの「リロード」機能を使用してみてください。
http://docs.python.org/library/functions.html?highlight=reload#reload
コードをインポートする前に IPython autoreload 拡張機能を有効にします。
%load_ext autoreload
%autoreload 2
通常の django シェルで使用していますが、完全に機能しますが、いくつかの制限があります。
警告:
信頼できる方法で Python モジュールをリロードすることは、一般的に困難であり、予期しないことが起こる可能性があります。%autoreload は、モジュール内の以前の関数コード オブジェクトとクラスの一部を新しいバージョンに置き換えることで、一般的な落とし穴を回避しようとします。これにより、次のことが機能します。
既知の残りの警告の一部は次のとおりです。
ソース: https://ipython.org/ipython-doc/3/config/extensions/autoreload.html#cabeats
もう 1 つの優れたオプションは、コードを別のスクリプトに記述し、次のように django シェルに送信することです。
manage.py shell < my_script.py
IPython でモジュールをリロードするのに非常にうまく機能するスクリプトを作成しました。
これは、sys.modules からモジュールを削除してから再インポートする、上記の wrongite の回答の手法に基づいています。
私が見つけた最も簡単な解決策は、関数を自動的にリロードする shell_plus と iPython の組み合わせです。