在Python解释器中如何重新导入更新的模块包?
在Python解释器中如何重新导入更新的模块包?
这个问题在这里已经有答案了:
我经常在Python解释器中测试我的模块,当我看到错误时,我会迅速更新.py文件。但是,我该如何让它在解释器中反映出来?到目前为止,我一直在退出和重新进入解释器,因为重新导入文件不起作用。
admin 更改状态以发布 2023年5月20日
以上所有关于reload()
或imp.reload()
的答案都已过时。
reload()
在Python 3中不再是内置函数,imp.reload()
已被标记为过时(请参见help(imp)
)。
最好使用importlib.reload()
。
Python3的更新: (引用自已经回答的答案, 因为最近的编辑/评论表明了一个已经弃用的方法)
在Python3中,
reload
已经被移动到imp
模块。在3.4中,imp
被弃用,改用importlib
,在后者中添加了reload
。当面向3或更高版本时,要么在调用reload
时引用适当的模块,要么导入它。
要点:
- Python3 >= 3.4:
importlib.reload(包名)
- Python3 < 3.4:
imp.reload(包名)
- Python2: 继续查看以下内容
使用内置函数reload
:
https://docs.python.org/2/library/functions.html#reload
当执行
reload(模块)
时:
- Python模块的代码被重新编译,模块级别的代码被重新执行,定义了一组新的对象,这些对象绑定到模块字典中的名称上。扩展模块的初始化函数不会再次调用。
- 与Python中的所有其他对象一样,只有当其引用计数降至零时,旧的对象才会被回收。
- 模块命名空间中的名称更新为指向任何新的或更改的对象。
- 对旧对象的其他引用(例如模块外的名称) 不会重新绑定到新对象,并且必须在每个发生它们的命名空间中更新,如果需要的话。
示例:
# Make a simple function that prints "version 1" shell1$ echo 'def x(): print "version 1"' > mymodule.py # Run the module shell2$ python >>> import mymodule >>> mymodule.x() version 1 # Change mymodule to print "version 2" (without exiting the python REPL) shell2$ echo 'def x(): print "version 2"' > mymodule.py # Back in that same python session >>> reload(mymodule)>>> mymodule.x() version 2