在 Python 中删除导入的模块
Remove an imported module in Python
要在 Python 中删除导入的模块:
- 使用
del
语句删除sys
对模块的引用。 - 使用
del
语句删除对模块的直接引用。
主程序
import sys import requests # 👇️ <function get at 0x7f8c7d30e4d0> print(requests.get) # ✅ remove imported module del sys.modules['requests'] del requests # ⛔️ NameError: name 'requests' is not defined print(requests.get)
第一步是删除对sys.modules
我们试图卸载的模块的引用。
Sys.modules是一个字典,将模块名称映射到已经加载的模块。
字典最常用于强制重新加载模块。
这是必要的,因为即使我们删除了对模块的直接引用,我们仍然可以通过
sys.modules
字典引用它。主程序
import sys import requests # 👇️ <function get at 0x7f8c7d30e4d0> print(requests.get) del requests # 👇️ <module 'requests' from '/home/borislav/Desktop/bobbyhadz_python/venv/lib/python3.10/site-packages/requests/__init__.py'> print(sys.modules['requests'])
为了使模块获得垃圾回收,我们必须从
sys.modules
字典中删除键并删除对该模块的直接引用。
卸载模块有时会很棘手。您可以尝试的另一种方法是使用该importlib.reload()
方法重新加载模块。
主程序
from importlib import reload import requests if len('a') == 1: requests = reload(requests) # 👇️ <function get at 0x7f5cddf024d0> print(requests.get)
importlib.reload
方法重新加载
以前导入的模块。
该方法的参数必须是已成功导入的模块对象(在重新加载之前)。
importlib.reload()
当我们使用外部编辑器编辑了模块的源代码并且我们希望在不退出解释器的情况下访问更新版本时,最常使用该方法。该reload()
方法返回模块对象,因此您可以直接将模块重新分配给调用的结果reload(module)
。