Skip to content

[BUG]:module_manager install 成功安装带有 IndentationError 的 Python 模块 #193

@WangMiao02

Description

@WangMiao02

Bug 报告 (Bug Report)

问题描述 (Description):

在使用 module_manager install 命令安装一个包含基本语法错误(例如 IndentationError 缩进错误)的 Python 模块时,该命令报告安装成功,但模块代码实际上是有问题的。只有在 BMF 图运行时尝试加载和使用该模块时,语法错误才会被发现并导致运行时错误。

我认为 module_manager install 在安装 Python 模块时应该进行基本的语法检查,并在发现模块代码无效时报告安装失败。

重现步骤 (Steps to Reproduce):

  1. 环境:

    • 操作系统:Ubuntu 20.04
    • BMF 安装方式:通过 pip install BabitMF 安装
    • BMF 版本:0.0.9
    • Python 版本:3.8.10
  2. 创建一个包含语法错误的 Python 模块:
    创建以下文件结构和内容(注意 my_module.py 中故意制造的 IndentationError):

    ~/workplace/
    └── my_python_module/
        └── my_module.py
    

    ~/workplace/my_python_module/my_module.py 的内容:

Image

  1. 尝试使用 module_manager install 安装该模块:
    在终端中切换到 ~/workplace 目录。使用通过 pip 安装找到的 module_manager 可执行文件完整路径,并设置 LD_LIBRARY_PATH

    # 假设 BMF bin 和 lib 路径来自之前的查找结果
    # 如果不同,请替换为你的实际路径
    BMF_BIN_PATH="/home/wangmiao/.local/lib/python3.8/site-packages/bmf/bin/module_manager"
    BMF_LIB_DIR="/home/wangmiao/.local/lib/python3.8/site-packages/bmf/lib"
    
    cd ~/workplace
    sudo LD_LIBRARY_PATH="${BMF_LIB_DIR}:${LD_LIBRARY_PATH}" ${BMF_BIN_PATH} install my_python_module python my_module:my_module $(pwd)/my_python_module v0.0.1
  2. 观察安装命令的输出:
    命令报告安装成功,即使模块代码存在语法错误。

Image

Image

  1. 尝试在 BMF 图中使用已安装的模块:
    创建一个简单的 BMF Python 脚本(例如 test.py)并在图中包含 my_python_module

    import bmf
    import os
    
    # 如果脚本运行环境需要,设置 LD_LIBRARY_PATH
    # 替换为你的实际 BMF lib 路径
    BMF_LIB_DIR = "/home/wangmiao/.local/lib/python3.8/site-packages/bmf/lib"
    os.environ['LD_LIBRARY_PATH'] = f"{BMF_LIB_DIR}:{os.environ.get('LD_LIBRARY_PATH', '')}"
    
    input_video_path = "./test.mp4" # 确保这个文件存在用于测试
    output_path = "./custom_module.mp4"
    
    try:
        (
            bmf.graph()
                .decode({'input_path': input_video_path})['video']
                .module('my_python_module') # 使用已安装的模块名称
                .encode(None, {"output_path": output_path})
                .run()
        )
        print("\nBMF graph execution finished successfully.")
    except Exception as e:
        print(f"\nAn error occurred during BMF graph execution: {e}")
  2. 观察运行时错误:
    运行 BMF 脚本时,与 Python 模块语法相关的错误在图初始化/执行阶段被抛出,导致程序崩溃。

预期行为 (Expected behavior):

module_manager install 命令在安装过程中应该检测到模块文件的 IndentationError(或其他基本的 Python 语法错误),并报告安装失败,提示模块代码无效。

实际行为 (Actual behavior):

module_manager install 命令成功完成并报告模块已安装。语法错误仅在 BMF 运行时尝试加载和导入 Python 模块文件时被发现,导致一个包含原始 Python IndentationErrorRuntimeError

Metadata

Metadata

Assignees

Labels

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions