正在重新加载 Python 个包

Reloading Python Packages

主模块位于 runner 包中并执行其他包中的内容。主模块还可以 更新 其他包,当发生这种情况时,我想重新加载它们 为了获得添加到这些包的新 functions/modules .

项目结构

|--runner
|----main.py
|--core
|----module_1.py
|--configurations
|--utils

但这不起作用。

我尝试了以下命令:

  1. importlib.reload - 只重新加载一个模块,递归地使用它 sys.modules 没有将新模块添加到导入树中。示例:如果在更新后,“核心”接收到一个新模块“module_new.py”并且它在“module_1.py”中导入,它在重新加载后无法识别。
  2. 我尝试使用 IPython.lib.deepreload - 但效果不佳。

我已经被这个问题困扰了一段时间,但还没有找到任何有效的解决方案。 建议?谢谢

我通过使用来自外部执行脚本的 while 循环重新启动整个程序来解决这个问题。 退出代码 2:需要更新

    Do
    {
        $process = Start-Process python -ArgumentList $CommandLine -verb RunAs -PassThru -WindowStyle Minimized -Wait
    } WHILE ($process.ExitCode -eq 2)

如果模块不在 sys.modules dict

中,将通过导入命令重新加载
# import some standard (non-updatable) modules
import numpy as np

# save set of non-reloadable modules on first run,
# and delete reloadable modules on other runs
if 'init_modules' not in globals():
    init_modules = set(sys.modules.keys())
else:
    modules = list(sys.modules.keys())
    for m in modules:
        if m not in init_modules:
            del(sys.modules[m])

# import reloadable packages and modules
import MyPackage