gpt4 book ai didi

python - 在 Python 中重新加载整个包结构

转载 作者:太空宇宙 更新时间:2023-11-04 05:20:57 26 4
gpt4 key购买 nike

我在 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 时,我将所有要重新加载的东西都挂起来执行此操作的最佳做​​法是什么?提前致谢。

最佳答案

我发现的最接近的东西是直接基于对类似问题 (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

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

关于python - 在 Python 中重新加载整个包结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40353226/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com