対話モードでモジュールをインポートすると、モジュールが変更された場合(バグ修正など)、単にreload()コマンドを使用できます。Pythonで単一の関数を再インポートする
しかし、私はモジュール全体をインポートせず、 'from import f、g'インポートステートメントを使用しました。 Gのみを再インポートする方法はありますか?
(私は 'del g'でパラメータテーブルから関数を削除して、.pycファイルをディレクトリから削除しようとしましたが、役に立たなかった。ロードされた)。
対話モードでモジュールをインポートすると、モジュールが変更された場合(バグ修正など)、単にreload()コマンドを使用できます。Pythonで単一の関数を再インポートする
しかし、私はモジュール全体をインポートせず、 'from import f、g'インポートステートメントを使用しました。 Gのみを再インポートする方法はありますか?
(私は 'del g'でパラメータテーブルから関数を削除して、.pycファイルをディレクトリから削除しようとしましたが、役に立たなかった。ロードされた)。
from foo import bar
を実行すると、はとなり、モジュール全体がインポートされます。現在の名前空間に記号bar
のコピーを作成しています。あなたはではなく、だけをインポートしています。
reload
の機能は完全には信頼できません(コンパイル済みのCモジュールでは機能しません)。インタプリタを終了して再起動することをお勧めします。最初のインポートのために
、(また、ルックアップを高速化)変数にインポート作品をバインド:
import numpy as NP
import numpy.linalg as LA
...
reload(LA)
これは、対話型インタプリタのためだけであるので、私は何かのようなことはないと思います:
def my_reload(mod, name):
reload(mod)
globals()[name] = getattr(mod, name)
myreload(somemodule, "some_function")
がひどいです。これは通常のようにモジュールをリロードし、古いオブジェクトを指す名前を新しいオブジェクトに再バインドします。これは、reload
が始まるすべてのインスタンスで機能するはずです。また、実際のオブジェクトを取得し、その__name__
属性を使用して名前を取得するようにプログラムすることもできます。関数、クラス、モジュールはすべて__name__
属性を持っていますが、モジュールレベルの辞書のようなものは柔軟性がありません。
グローバルなもの以外のオブジェクトへの参照を置き換えることはありませんが、もともとドット付きの名前でアクセスしたとしても、reload
にはなりません。オブジェクトへの参照が緩んだら、あなたができることはあまりありません。
単にインタープリタを再起動してください;) – Ant
正に、それは私がしていることです。 –