Python: how to import from all modules in dir?
目录结构:
1 2 3 4 | main.py my_modules/ module1.py module2.py |
模块1.py:
1 2 3 4 5 | class fooBar(): .... class pew_pew_FooBarr() .... ... |
号
如何在不带前缀的情况下将所有类从module*添加到main(即使用foo=foobar(),而不是foo=my_modules.module1.foobar())。
一个明显的决定是在main.py中编写如下内容:
1 2 3 4 | from my_modules.module1 import * from my_modules.module2 import * from my_modules.module3 import * ... |
但我不想在创建新模块时更改main.py。有解决办法吗?
我知道导入这样的类不是一个好主意,但是我仍然对此很好奇。
upd:这个问题不同于这个在python文件夹中加载所有模块的问题,因为我的问题是加载没有名称空间的模块。
在
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | __all__ = [] import pkgutil import inspect for loader, name, is_pkg in pkgutil.walk_packages(__path__): module = loader.find_module(name).load_module(name) for name, value in inspect.getmembers(module): if name.startswith('__'): continue globals()[name] = value __all__.append(name) |
现在,不要这样做:
1 | from my_modules.class1 import Stuff |
号
你只需做:
1 | from my_modules import Stuff |
或者将所有东西导入全球范围,这似乎是您想要做的:
1 | from my_modules import * |
。
这种方法的问题是类相互覆盖,因此如果两个模块提供