如何在更改模块后重新加载它?
如何在更改模块后重新加载它?
Python Console with Python 3.4.2
我在模块中定义了一个函数,在PyCharm社区版4.5.4中的Python控制台中可以正确运行:
ReloadTest.py:
def reloadtest(x): print("Version A: {}".format(x))
Python Console:
Python 3.4.2 (v3.4.2:ab2c023a9432, Oct 6 2014, 22:15:05) [MSC v.1600 32 bit (Intel)] on win32 >>> from ReloadTest import reloadtest >>> reloadtest(1) Version A: 1
当我把函数改为“版本B”后,PyCharm找不到更改,importlib.reload(ReloadTest)
报错。
每次修改模块后,我都必须重新加载Python控制台或重新启动PyCharm。我做错了什么?最好的处理方法是什么?
ReloadTest.py:
def reloadtest(x): print("Version B: {}".format(x))
Python Console:
>>> reloadtest(1) Version A: 1 >>> from ReloadTest import reloadtest >>> reloadtest(1) Version A: 1 >>> import importlib >>> importlib.reload(ReloadTest) Traceback (most recent call last): File "", line 1, in NameError: name 'ReloadTest' is not defined >>> from ReloadTest import reloadtest >>> reloadtest(1) Version A: 1 >>> import ReloadTest >>> reloadtest(1) Version A: 1
admin 更改状态以发布 2023年5月21日
我花了一些时间才理解之前的答案... 并且,如果你需要运行的代码块在你不想修改为仅运行一次的脚本的中间,那个答案也不是很实际。
你可以简单地执行:
import importlib importlib.reload(my_module) from my_module import my_function
然后,你可以使用更新后的函数版本来运行你的代码。
适用于PyCharm Community Edition 2016.3.2。
根据第一条评论进行编辑:
只有在首先导入了模块本身的情况下,这才起作用(否则将出现第一条评论中所述的错误)。
import my_module from my_module import my_function # Now calls a first version of the function # Then you change the function import importlib importlib.reload(my_module) from my_module import my_function # Now calls the new version of the function
你可以通过在设置
->构建、执行、部署
->控制台
->Python控制台
的启动脚本
中添加以下行来让Pycharm在更改时自动重新加载模块:
%load_ext autoreload %autoreload 2
更新:如此功能需要IPython(pip install ipython
),请参见此处:在IPython中重新加载子模块