模块导入后,是否可以取消导入?实际上当模块导入后,是无法逆向还原到导入前的状态的,但是可以利用“del 模块名”进行导入模块的删除,此时的删除只是删除了导入模块对应的模块变量名,删除后在调用时找不到模块了,但并没有真正删除整个导入模块。为什么这么说呢?这是因为删除后与删除前Python系统内相关的处理不同:
1、 首次导入会执行导入的模块文件,而导入后删除模块在此导入不会执行模块文件;
2、 使用《第10.2节 查看导入的Python模块》介绍的方法还是可以查看到模块名。
请看如下案例:
>>> import importtest
Now in importtest module!
>>> importtest.ftest()
execute ftest function....
>>> del importtest
>>> importtest.ftest()
Traceback (most recent call last):
File "", line 1, in
importtest.ftest()
NameError: name 'importtest' is not defined
>>> import importtest #删除后倒入没有执行模块文件
>>> importtest.ftest()
execute ftest function....
>>> import sys
>>> for m in sys.modules:
if str(sys.modules[m]).find(r'(built-in)')==-1 and str(sys.modules[m]).find(r'C:\Program Files\Python37')==-1 :print('模块名:',m,', 模块来源: ',sys.modules[m])
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
执行结果如下:
模块名: _frozen_importlib , 模块来源:
模块名: _frozen_importlib_external , 模块来源:
模块名: importlib._bootstrap , 模块来源:
模块名: importlib._bootstrap_external , 模块来源:
模块名: pyexpat.errors , 模块来源:
模块名: pyexpat.model , 模块来源:
模块名: xml.parsers.expat.model , 模块来源:
模块名: xml.parsers.expat.errors , 模块来源:
模块名: importtest , 模块来源:
>>>
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
执行截图:
本节简单介绍了是的能对导入模块进行逆向反导入,可以看到导入的模块可以删除但并不能真正反导入。每个模块只被导入一次,放入字典sys.module中,如果你改变了模块的内容,你必须重启程序,python不支持重新加载或卸载之前导入的模块。
老猿Python,跟老猿学Python!
博客地址:http://iyenn.com/index/link?url=https://blog.csdn.net/LaoYuanPython
请大家多多支持,点赞、评论和加关注!谢谢!
文章知识点与官方知识档案匹配,可进一步学习相关知识
Python入门技能树首页概览333596 人正在系统学习中

老猿Python
微信公众号
专注Python相关语言、图像音视频处理、AI


评论记录:
回复评论: