kongdeqiang
6 天以前 28ccfbfc51068a663a80764e14074df5edf2b5ba
funasr/utils/dynamic_import.py
New file
@@ -0,0 +1,61 @@
import importlib.util
import importlib.util
import inspect
import os.path
import sys
def load_module_from_path(file_path):
    """
    从给定的文件路径动态加载模块。
    :param file_path: 模块文件的绝对路径。
    :return: 加载的模块
    """
    module_name = file_path.split("/")[-1].replace(".py", "")
    spec = importlib.util.spec_from_file_location(module_name, file_path)
    module = importlib.util.module_from_spec(spec)
    spec.loader.exec_module(module)
    return module
def import_module_from_path(file_path: str):
    if file_path.startswith("http"):
        from funasr.download.file import download_from_url
        file_path = download_from_url(file_path)
    file_dir = os.path.dirname(file_path)
    # file_name = os.path.basename(file_path)
    module_name = file_path.split("/")[-1].replace(".py", "")
    if len(file_dir) < 1:
        file_dir = "./"
    sys.path.append(file_dir)
    try:
        importlib.import_module(module_name)
        print(f"Loading remote code successfully: {file_path}")
    except Exception as e:
        print(f"Loading remote code failed: {file_path}, {e}")
#
# def load_module_from_path(module_name, file_path):
#     """
#     从给定的文件路径动态加载模块。
#
#     :param module_name: 动态加载的模块的名称。
#     :param file_path: 模块文件的绝对路径。
#     :return: 加载的模块
#     """
#     # 创建加载模块的spec(规格)
#     spec = importlib.util.spec_from_file_location(module_name, file_path)
#
#     # 根据spec创建模块
#     module = importlib.util.module_from_spec(spec)
#
#     # 执行模块的代码来实际加载它
#     spec.loader.exec_module(module)
#
#     return module