您可以使用本机 python“imp”模块(https://docs.python.org/3.4/library/imp.html):
假设相同的项目树:
/client
__init__.py
/modules
__init__.py
foo.py
bar.py
spam.py
client init.py 文件:
# -*- coding: utf-8 -*-
#!/usr/bin/python
import modules.__init__
#here you generate
modules.__init__.__load_all__()
modules init.py 文件:
# -*- coding: utf-8 -*-
#!/usr/bin/python
import imp,os
def __load_all__(dir="modules"):
list_modules=os.listdir(dir)
list_modules.remove('__init__.py')
for module_name in list_modules:
if module_name.split('.')[-1]=='py':
print "Load module ' ",module_name,"' :"
foo = imp.load_source('module', dir+os.sep+module_name)
foo.MyClass()
最后
模块(spam.py、bar.py、foo.py 等)文件:
# -*- coding: utf-8 -*-
#!/usr/bin/python
def __init__():
print "load"
def MyClass():
print "myclass spam,bar,foo, etc..."
运行客户端时__init__.py
,我们迭代模块并动态初始化它们。