2017-07-25 36 views
1

我調試(在PyCharm中)一個腳本。我停在一個斷點,然後我去到調試控制檯窗口,並從那裏,我調出一個導入線,像這樣:Python:「取消導入」,「重新導入」,「重置導入」?

import my_util1 from my_utils 

然後我打電話my_util1。到目前爲止,一切都很好。然後我改變「my_util1」中的內容。現在我想調用(更新的)my_util1,但是我不能:系統(Python?Pycharm?)僅「看到」my_util1的先前版本。

除了退出PyCharm並重新啓動項目之外,是否有可能「重置」(刷新)我之前導入的內容或「重新導入」它?

這不是關於動態更改正在調試的實際代碼。我正在尋找的任務更簡單 - 只需撤消「導入」操作即可,或者一次性重置/清除/刷新所有「導入」即可。此外,該操作可以在調試器窗口中完成,而不是在代碼窗口中完成。

+0

你重新啓動調試器時,你介紹你的新代碼? – idjaw

+0

不,我不知道。我想,也許有一種方法可以「重新包含」一個功能,就像我將它包括在內一樣。我想這是可行的。我錯了嗎? –

+0

PyCharm中是否存在「編輯並繼續」?重新加載代碼到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

非常感謝!有效。 –