gpt4 book ai didi

python - __init__.py 中未选取 __all__ 变量

转载 作者:行者123 更新时间:2023-12-01 04:54:00 25 4
gpt4 key购买 nike

我有一个看起来像这样的__init__.py

__init__.py:

__all__ = ['cooling', 'counters']

我的目录结构如下:

example_dir/  
__init__.py
cooling.py
power.py
counters.py

当我尝试导入 example_dir 时,Python 不会导入coolingcounters。它什么也不导入。使用 Pdb,我看到它读取 __init__.py 但它拒绝读取 __all__ 变量。

我使用 imp.load_module 加载模块

我的整个程序:

def import_module(name, path=None):
parts = name.split('.')
module_name = ""
for index, part in enumerate(parts):
module_name = part if index == 0 else '%s.%s' % (module_name, part)
if path is not None:
path = [path]
fh, path, descr = imp.find_module(part, path)
mod = imp.load_module(module_name, fh, path, descr)
return mod


def load_module(name):
try:
mod = None
mod = sys.modules[name]
except KeyError:
mod = import_module(name)
finally:
if not mod:
raise ImportError('unable to import module %s' % name)
return mod

load_module('example_dir')

最佳答案

我认为您可能误解了 __all__ 的作用......

__init__.py中,您想要实际导入所需的模块。例如

# __init__.py
import example_dir.cooling as cooling
import example_dir.counters as counters
另一方面,

__all__ 表示当用户写入 from ... import * 时应导入当前模块中的哪些名称。

简而言之,__all__ 与导入的模块无关,只与导入模块后可用的名称有关(并且那么,仅当用户从模块导入所有内容时)。

关于python - __init__.py 中未选取 __all__ 变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27850733/

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