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

10 months ago
#!/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