更改后如何重新加载模块? [英] How do I reload a module after changing it?

查看:25
本文介绍了更改后如何重新加载模块?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

带有 Python 3.4.2 的 Python 控制台

我在 PyCharm 社区版 4.5.4 的 Python 控制台中定义了一个模块中正确运行的函数:
重载测试.py:

def reloadtest(x):print("版本 A:{}".format(x))

Python 控制台:

Python 3.4.2 (v3.4.2:ab2c023a9432, Oct 6 2014, 22:15:05) [MSC v.1600 32 bit (Intel)] on win32>>>从重载测试导入重载测试>>>重新加载测试(1)版本 A:1

在我将函数修改为版本 B"后,PyCharm 找不到更改,并且 importlib.reload(ReloadTest) 给我错误.
每次修改模块时,我都必须重新加载 Python 控制台或重新启动 PyCharm.我做错了什么?处理这个问题的最佳方法是什么?

ReloadTest.py:

def reloadtest(x):print("版本 B: {}".format(x))

Python 控制台:

<预><代码>>>>重新加载测试(1)版本 A:1>>>从重载测试导入重载测试>>>重新加载测试(1)版本 A:1>>>导入导入库>>>importlib.reload(重载测试)回溯(最近一次通话最后):文件<input>",第 1 行,在 <module>NameError:未定义名称ReloadTest">>>从重载测试导入重载测试>>>重新加载测试(1)版本 A:1>>>导入重载测试>>>重新加载测试(1)版本 A:1

解决方案

让它工作!
我应该导入整个模块import Module,而不是from Module import function,然后通过Module.function() 调用该函数.这是因为

从 ReloadTest 导入 reloadtest

importlib.reload(ReloadTest)

不能一起去.

<预><代码>>>>导入重载测试>>>ReloadTest.reloadtest(1)版本 A:1

修改后:

<预><代码>>>>importlib.reload(重载测试)<模块'ReloadTest'来自'C:\...\ReloadTest.py'>>>>ReloadTest.reloadtest(2)版本 B:2

Python Console with Python 3.4.2

I defined a function in a module which runs correctly in Python Console in PyCharm Community Edition 4.5.4:
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   

After I modified the function to "Version B", PyCharm can't find the change, and importlib.reload(ReloadTest) gives me error.
I must reload the Python Console or restart PyCharm every time I modify a module. What did I do wrong? What is the best way to handle this?

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 "<input>", line 1, in <module>
NameError: name 'ReloadTest' is not defined
>>> from ReloadTest import reloadtest
>>> reloadtest(1)
Version A: 1
>>> import ReloadTest
>>> reloadtest(1)
Version A: 1

解决方案

Get it to work!
Instead of from Module import function, I should import the whole module import Module, then call the function by Module.function(). This is because

from ReloadTest import reloadtest

and

importlib.reload(ReloadTest)

can't go together.

>>> import ReloadTest
>>> ReloadTest.reloadtest(1)
Version A: 1

After making changes:

>>> importlib.reload(ReloadTest)
<module 'ReloadTest' from 'C:\...\ReloadTest.py'>
>>> ReloadTest.reloadtest(2)
Version B: 2

这篇关于更改后如何重新加载模块?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆