python动态导入文件夹下所有模块
作者:YXN-python 阅读量:63 发布日期:2025-05-19
如下:
导入当前文件夹下所有脚本,脚本的name属性作为键,对象作为值返回
# auto_script/__init__.py
import importlib
import inspect
import os
from typing import Type, Dict
def import_all_script() -> Dict[str, Type]:
"""
导入当前目录下的py pyc文件所有类
键是“类的name属性”,值是对应的类对象。
"""
current_dir = os.path.dirname(os.path.abspath(__file__))
classes = {}
package_name = __name__
filter_list = ['template.py'] # Exclusion
for filename in os.listdir(current_dir):
if filename.endswith(('.py', '.pyc')) and not filename.startswith('_') and filename not in filter_list:
module_name = os.path.splitext(filename)[0]
try:
if package_name == "__main__":
full_module_name = f"auto_script.{module_name}"
else:
full_module_name = f".{module_name}"
module = importlib.import_module(full_module_name, package=package_name)
for name, obj in inspect.getmembers(module):
expected_module = f"{package_name}.{module_name}" if package_name != "__main__" else f"auto_script.{module_name}"
if inspect.isclass(obj) and obj.__module__ == expected_module:
full_name = obj.name # name作为键
classes[full_name] = obj
except ImportError as e:
print(f"无法导入模块:{module_name}: {e}")
except Exception as e:
print(f"导入模块错误: {module_name}: {e}")
return classes
脚本应该要定义name属性
class Task1:
name = '脚本1'
class Task2:
name = '脚本2'
YXN-python
2025-05-19