【问题标题】:Reload a whole package structure in Python在 Python 中重新加载整个包结构
【发布时间】:2017-03-14 04:31:00
【问题描述】:

我在 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 文件所做的是导入所有子模块并一个一个地重新加载它们

例如:root.subpackage1.__init__.py

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

这很乏味,因此我想有更好的方法来导入和重新加载所有结构

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

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

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

root.subpackage1.a.my_test()

没有这样做...

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

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

【问题讨论】:

标签: python import package reload maya


【解决方案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

这有帮助吗?如果我没有正确理解您的问题,我深表歉意。

【讨论】:

  • 非常感谢,这是动态重新加载所有内容的好方法。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-19
  • 2013-09-18
  • 2016-04-19
  • 1970-01-01
  • 2021-09-20
  • 2013-10-28
相关资源
最近更新 更多