代码之家  ›  专栏  ›  技术社区  ›  Shayan

如何在Python中正确重新加载模块

  •  0
  • Shayan  · 技术社区  · 1 年前

    这个问题已经被问过很多次了,这里有几个可供参考:

    Reimport a module while interactive

    Proper way to reload a python module from the console

    How to reload a module's function in Python?

    根据我的搜索和学习,我写了以下内容,但它无法正确重新加载模块:

    import pandas as pd
    
    pd.get_option('display.width')  # 80
    
    pd.set_option("display.width", 150)
    
    del pd
    
    import importlib
    
    import sys
    
    pd = importlib.reload(sys.modules['pandas'])
    
    pd.get_option('display.width')  # 150
    
    1 回复  |  直到 1 年前
        1
  •  1
  •   alko    1 年前

    在这种情况下,您的模块(pandas)实际上是重新加载的,但是 importlib.reload 它不会清除模块级变量的内存,只是重新执行模块代码。现在,重新加载后模块变量的值取决于它的初始化方式。如果你像这样定义你的模块m.py

    x = 0
    try:
        y
    except NameError:
        y = 0
    

    你可以看到行为上的差异:

    >>> import importlib
    >>> import m
    >>> m.x
    0
    >>> m.y
    0
    >>> m.x = 1
    >>> m.y = 1
    >>> _ = importlib.reload(m)
    >>> m.x
    0
    >>> m.y
    1
    
    推荐文章