2017-07-25 39 views
1

私はPyCharmでスクリプトをデバッグします。私はその後、私はデバッグコンソールウィンドウに移動し、そこから、私はこのように、インポート行を呼び出し、ブレークポイントで停止します。Python: "de-import"、 "re-import"、 "reset import"?

import my_util1 from my_utils 

は、その後、私はmy_util1を呼び出します。これまではすべてがOKです。その後、私は "my_util1"の中で何かを変更します。今私は(更新された)my_util1を呼びたいが、私はできない:システム(Python?Pycharm?)は、my_util1の前のバージョンだけを見る。

以前にインポートしたものを「リセット」(リフレッシュ)したり、PyCharmを終了してプロジェクトを再起動する以外に、「再インポート」する可能性はありますか?

デバッグ対象の実際のコードを動的に変更することではありません。私が探しているタスクは簡単です - 単に 'インポート'操作を元に戻すか、一度にすべての 'インポート'をリセット/クリア/リフレッシュするだけで十分です。さらに、アクションはコードウィンドウではなくデバッガウィンドウ内で実行できます。

+0

あなたの新しいコードを導入するとき、あなたのデバッガを再起動していますか? – idjaw

+0

いいえ、私はしません。私は、おそらくそれを含めるのと同じように、「再組み込み」する方法があると考えました。私はそれが実現可能であると想像します。私が間違っている? –

+0

PyCharmの[Edit and Continue]はありますか? Eclipse/PyDevのように実行中のプログラムにコードを再読み込みしますか?](https://stackoverflow.com/questions/23333815/is-there-edit-and-continue-in-pycharm-reload-code-into-running-program-like -i) – idjaw

答えて

1

sys.modulesは、現在インポートされているもののPythonの考えを変更するために操作できます。 Pythonドキュメントを引用するには:

これは、モジュール名を既に読み込まれたモジュールにマップする辞書です。これは、モジュールやその他のトリックを強制的にリロードするために操作することができます。しかし、辞書を置き換えることは必ずしも期待どおりに機能するとは限らず、辞書から重要な項目を削除するとPythonが失敗する可能性があります。

使用例:

import sys 
import my_util1 from my_utils 

# Now sys.modules['my_utils'] exists and my_util1 is a local name. 

del sys.modules['my_utils'] 

# my_util1 still exists as a local name, but Python has "forgotten" the import. 

import my_util1 from my_utils 
# This re-imports my_utils and binds the new my_util1. 
+0

ありがとう!出来た。 –