用Python重新加载整个包结构

时间:2016-11-01 02:13:27

标签: python import package reload maya

我在Maya工作。我需要的是导入一个自定义包并完全重新加载它包含所有子包和模块。主要是因为我希望Maya自动填充模块路径,同时我正在写作。例如,我有这种包结构

root (package)
    subpackage1 (package)
        __init__.py (module)
        a.py (module)
        b.py (module)

    subpackage2 (package)
        c.py (module)
        d.py (module)
        e.py (module)

我在 __ init __。py 文件上做的是导入所有子模块并逐个重新加载它们

ex:root.subpackage1 .__ init __。py

import a
import b
reload(a)
reload(b)

这非常繁琐,因此我认为有更好的方法可以导入和重新加载所有结构

当我第一次将整个结构加载到内存中时导入包。

import root
reload(root)
root.subpackage1.a.my_function()

所以我们假设现在我更新a.py文件并添加一个名为my_test的函数。我需要再次重新加载所有包结构,以便能够像这样评估它。

root.subpackage1.a.my_test()

执行此操作...

from root.subpackage import a
reload(a)
a.my_test()

当我导入并重新加载 root 时,我会重新加载要重新加载的所有内容 最好的做法是什么? 提前谢谢。

1 个答案:

答案 0 :(得分:1)

我发现的最接近的事情是直接基于对类似问题的回答(https://stackoverflow.com/a/1057534/7124215)。我已经为您的问题的__init__.py文件引入了一些更改:

from os.path import dirname, basename, isfile
import glob

modules = glob.glob(dirname(__file__)+"/*.py")
__all__ = [ basename(f)[:-3] for f in modules if isfile(f) and not f.endswith('__init__.py')]

from . import *
for module in __all__:
    reload(module)

del dirname, basename, isfile, glob, modules

这有帮助吗?如果我没有正确理解你的问题,我会道歉。