时间:2021-05-22
问题
你想重新加载已经加载的模块,因为你对其源码进行了修改。
解决方案
使用imp.reload()来重新加载先前加载的模块。举个例子:
>>> import spam>>> import imp>>> imp.reload(spam)<module 'spam' from './spam.py'>>>>讨论
重新加载模块在开发和调试过程中常常很有用。但在生产环境中的代码使用会不安全,因为它并不总是像您期望的那样工作。
reload()擦除了模块底层字典的内容,并通过重新执行模块的源代码来刷新它。模块对象本身的身份保持不变。因此,该操作在程序中所有已经被导入了的地方更新了模块。
尽管如此,reload()没有更新像”from module import name”这样使用import语句导入的定义。举个例子:
# spam.pydef bar(): print('bar')def grok(): print('grok')现在启动交互式会话:
>>> import spam>>> from spam import grok>>> spam.bar()bar>>> grok()grok>>>不退出Python修改spam.py的源码,将grok()函数改成这样:
def grok(): print('New grok')现在回到交互式会话,重新加载模块,尝试下这个实验:
>>> import imp>>> imp.reload(spam)<module 'spam' from './spam.py'>>>> spam.bar()bar>>> grok() # Notice old outputgrok>>> spam.grok() # Notice new outputNew grok>>>在这个例子中,你看到有2个版本的grok()函数被加载。通常来说,这不是你想要的,而是令人头疼的事。
因此,在生产环境中可能需要避免重新加载模块。在交互环境下调试,解释程序并试图弄懂它。
以上就是Python如何重新加载模块的详细内容,更多关于Python重写加载模块的资料请关注其它相关文章!
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
本文实例讲述了Python实现动态加载模块、类、函数的方法。分享给大家供大家参考,具体如下:动态加载模块:方式1:系统函数__import__()方式2:imp
reload()简介作用:用于重新载入之前载入的模块语法格式:reload(module)参数:module为模块对象,必须已经被加载返回值:返回模块对象注意事
Python中的模块(.py文件)在创建之初会自动加载一些内建变量,__name__就是其中之一。Python模块中通常会定义很多变量和函数,这些变量和函数相当
本文介绍了react-webpack2-热模块替换[HMR],分享给大家,具体如下:模块热替换功能会在应用程序运行过程中替换、添加或删除模块,而无需重新加载页面
本文详述了Python的import机制,对于理解Python的运行机制很有帮助!1.标准import:Python中所有加载到内存的模块都放在sys.modu