You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Jupyter Notebook如何导入指定函数并避免执行主代码?

解决Jupyter Notebook中导入.ipynb文件特定函数的问题

方法1:将.ipynb转换为.py文件后导入

这是最稳妥的原生解决方案,完全适配Python的模块导入机制:

  • 终端命令行转换
    在终端执行以下命令,把目标.ipynb文件转成同名.py文件:

    jupyter nbconvert --to script your_notebook.ipynb
    

    转换完成后,直接像普通Python模块一样导入指定函数:

    # 在目标Notebook中执行
    from your_notebook import your_target_function
    

    原文件中if __name__ == "__main__":下的代码不会被执行,因为导入时模块的__name__不等于"__main__"。

  • Notebook内直接转换
    不用开终端的话,可在目标Notebook里写代码完成转换:

    from nbconvert import PythonExporter
    import nbformat
    
    def ipynb_to_py(ipynb_path, py_path):
        nb = nbformat.read(ipynb_path, as_version=4)
        exporter = PythonExporter()
        source, _ = exporter.from_notebook_node(nb)
        with open(py_path, 'w', encoding='utf-8') as f:
            f.write(source)
    
    # 调用转换函数
    ipynb_to_py("your_notebook.ipynb", "your_notebook.py")
    
    # 导入目标函数
    from your_notebook import your_target_function
    

方法2:用import_ipynb模块直接导入

这个第三方模块专门支持从.ipynb文件导入模块,无需转换:

  1. 先安装模块:
    pip install import-ipynb
    
  2. 在目标Notebook中直接导入:
    import import_ipynb
    from your_notebook import your_target_function
    
    同样,原文件的if __name__ == "__main__":代码块不会被触发。

方法3:自定义代码读取.ipynb并导入指定函数

不想装额外模块的话,可以自己写代码读取.ipynb的代码单元格,过滤掉main块后执行:

import nbformat

def get_function_from_ipynb(ipynb_path, func_name):
    # 读取ipynb文件
    nb = nbformat.read(ipynb_path, as_version=4)
    # 遍历所有代码单元格
    for cell in nb.cells:
        if cell.cell_type == 'code':
            source = cell.source
            # 过滤掉main块及之后的代码
            if 'if __name__ == "__main__":' in source:
                source = source.split('if __name__ == "__main__":')[0]
            # 执行代码到全局命名空间
            exec(source, globals())
    # 返回指定函数
    return globals()[func_name]

# 使用示例
your_target_function = get_function_from_ipynb("your_notebook.ipynb", "your_target_function")
# 直接调用函数
your_target_function()

注意:这种方法要求原.ipynb文件中需要导入的函数都定义在if __name__ == "__main__":块之前。

内容的提问来源于stack exchange,提问作者JDoesML

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.11 23:42:09