重新导入模块

使用交互式解释器时,你可能需要重新加载模块。如果你正在编辑模块并想要导入最新版本,或者你已修补现有模块的元素并想要还原更改,则此功能非常有用。

请注意,你不能仅仅重新启动模块以恢复:

import math
math.pi = 3
print(math.pi)    # 3
import math
print(math.pi)    # 3

这是因为解释器会注册你导入的每个模块。当你尝试重新导入模块时,解释器会在寄存器中看到它并且什么都不做。所以重新导入的难点是从寄存器中删除相应的项目后使用 import

print(math.pi)    # 3
import sys
if 'math' in sys.modules:  # Is the ``math`` module in the register?
    del sys.modules['math']  # If so, remove it.
import math
print(math.pi)    # 3.141592653589793

但更简单明了。

Python 2

使用 reload 功能:

Python 2.x >= 2.3

import math
math.pi = 3
print(math.pi)    # 3
reload(math)
print(math.pi)    # 3.141592653589793

Python 3

reload 功能已经转移到了 importlib

Python 3.x >= 3.0

import math
math.pi = 3
print(math.pi)    # 3
from importlib import reload
reload(math)
print(math.pi)    # 3.141592653589793