You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
42 lines
1.5 KiB
42 lines
1.5 KiB
#!/usr/bin/env python
|
|
# -*- coding:utf-8 -*-
|
|
__author__ = 'ZL'
|
|
import importlib.util
|
|
import os
|
|
|
|
def import_source(module_name,module_path):
|
|
module_spec = importlib.util.spec_from_file_location(module_name, module_path) #根据给定的模块名和路径创建一个模块规范对象
|
|
module = importlib.util.module_from_spec(module_spec) #根据模块规范创建一个新模块对象
|
|
module_spec.loader.exec_module(module) #执行模块的代码,将其导入到新创建的模块对象中
|
|
return module
|
|
|
|
#遍历指定目录的文件,并去除掉一部分文件
|
|
def walk_py(path):
|
|
for dir_path, dir_names, filenames in os.walk(path):
|
|
if dir_path.endswith("__pycache__"):
|
|
continue
|
|
|
|
for f in filenames:
|
|
if f.startswith('_') or f.endswith('_.py'):
|
|
continue
|
|
|
|
split = f.split('.')
|
|
|
|
if len(split) == 2 and split[1] == 'py':
|
|
abspath = os.path.abspath(os.path.join(dir_path, f))
|
|
yield abspath, split[0]
|
|
|
|
|
|
def load_plugins(path):
|
|
plugins = []
|
|
for file_path, name in walk_py(path):
|
|
try:
|
|
module = import_source(spec="repoc_plugins", path=file_path)
|
|
Plugin = getattr(module, 'Plugin')
|
|
plugin = Plugin()
|
|
setattr(plugin, '_plugin_name', name)
|
|
plugins.append(plugin)
|
|
except Exception as e:
|
|
print("load plugin error from {}".format(file_path))
|
|
|
|
return plugins
|