如何在更改模块后重新加载它?

22 浏览
0 Comments

如何在更改模块后重新加载它?

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日
0
0 Comments

我花了一些时间才理解之前的答案... 并且,如果你需要运行的代码块在你不想修改为仅运行一次的脚本的中间,那个答案也不是很实际。

你可以简单地执行:

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

0
0 Comments

你可以通过在设置->构建、执行、部署->控制台->Python控制台启动脚本中添加以下行来让Pycharm在更改时自动重新加载模块:

%load_ext autoreload
%autoreload 2

enter image description here

更新:如此功能需要IPython(pip install ipython),请参见此处:在IPython中重新加载子模块

0