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

如何从Python Jupyter Notebook/Jupyter Lab生成控制流图?是否存在无需导出为*.py文件的自动化方案?

Generate Control Flow Graphs from Jupyter Notebook/Lab Automatically

Great question—copy-pasting code between notebooks and .py files is definitely a tedious workaround, so here are a few streamlined, automated approaches to skip that step entirely:

1. Use nbconvert to Automate Export & Processing

Jupyter’s built-in nbconvert tool can convert your .ipynb file to a clean Python script in one command, which you can feed directly to your CFG generator (like py2cfg or staticfg).

Example Workflow:

  • Step 1: Convert notebook to a runnable script
    Run this in your terminal to strip out markdown cells and Jupyter prompts:

    jupyter nbconvert --to script --no-prompt your_notebook.ipynb
    
  • Step 2: Generate the CFG
    For staticfg, run:

    python -m staticfg your_notebook.py -o cfg_output.png
    

    For py2cfg, use:

    py2cfg your_notebook.py -o cfg_output.dot
    
  • Bonus: Combine into a single command
    Skip the intermediate file (works on Unix-like systems):

    jupyter nbconvert --to script --no-prompt --stdout your_notebook.ipynb > temp_script.py && python -m staticfg temp_script.py -o cfg.png && rm temp_script.py
    

2. Generate CFG Directly Within the Notebook

If you want to avoid leaving Jupyter Lab/Notebook entirely, use the nbformat library to extract code cells programmatically, clean them up, and pass them to your CFG tool.

Example Code Snippet:

import nbformat
from staticfg import CFGBuilder
import os

# Load your notebook file
notebook = nbformat.read('your_notebook.ipynb', as_version=4)

# Extract and clean code cells (skip magic commands)
code_blocks = []
for cell in notebook.cells:
    if cell.cell_type == 'code':
        # Remove Jupyter magic lines that break static analysis tools
        cleaned_code = '\n'.join(line for line in cell.source.split('\n') if not line.startswith('%'))
        code_blocks.append(cleaned_code)

# Assemble into a single script
full_code = '\n\n'.join(code_blocks)

# Write to a temporary file (most CFG tools require a file path)
temp_file = 'temp_notebook_code.py'
with open(temp_file, 'w') as f:
    f.write(full_code)

# Generate and save the CFG
cfg = CFGBuilder().build_from_file(temp_file)
cfg.build_visual('notebook_cfg.png', show=False)

# Clean up the temporary file
os.remove(temp_file)

This will generate a notebook_cfg.png directly in your working directory—no copy-pasting required. Adjust the cleaning step if your notebook uses other non-standard syntax.

3. Jupyter Lab Extensions (Experimental)

While mature extensions for this exact use case are limited, keep an eye on community tools like:

  • jupyterlab-codegraph: An interactive extension that visualizes code structure, including basic control flow (great for exploring your notebook’s logic in real time).
  • Custom widgets: You could wrap the above script into a simple Jupyter widget that lets you generate a CFG with a single button click.

Final Notes

Remember that py2cfg and staticfg are static analysis tools, so they work best with notebooks that don’t rely heavily on runtime-dependent logic (like dynamic code execution). If your notebook uses interactive inputs or complex magic commands, you may need to add extra cleaning steps to the code extraction process.

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 05:28:14