如何通过代理在Jupyter Notebook中使用mermaid.ink渲染Mermaid图
代理环境下Jupyter Notebook显示Mermaid图的解决方案
方案1:在代码中配置请求代理
如果你的实现是通过requests调用mermaid.ink接口,可直接在请求时指定代理参数,让请求走代理通道获取图片:
from IPython.display import Image import requests def render_mermaid_with_proxy(mermaid_code): # 替换为你的代理地址和端口 proxy_settings = { 'http': 'http://your-proxy-address:port', 'https': 'http://your-proxy-address:port' } # 编码Mermaid代码并请求mermaid.ink encoded_code = requests.utils.quote(mermaid_code) img_url = f"https://mermaid.ink/img/{encoded_code}" # 带代理请求图片 response = requests.get(img_url, proxies=proxy_settings) # 直接显示图片内容 display(Image(response.content)) # 使用示例 render_mermaid_with_proxy(""" graph TD A[开始] --> B{判断} B -->|是| C[执行操作] B -->|否| D[跳过] C --> E[结束] D --> E[结束] """)
优点:无需额外安装工具,仅需修改现有代码;生成的图仍能在GitHub正常显示。
方案2:本地渲染Mermaid图(完全脱离远程服务)
使用mermaid-cli(mmdc)本地生成图片,彻底避免代理限制问题:
- 先安装mermaid-cli:通过npm执行
npm install -g @mermaid-js/mermaid-cli(需先安装Node.js) - 在Jupyter中编写Python代码调用本地mmdc生成并显示图片:
from IPython.display import Image, SVG import subprocess import tempfile import os def render_mermaid_local(mermaid_code, output_format='png'): # 创建临时Mermaid文件 with tempfile.NamedTemporaryFile(mode='w', suffix='.mmd', delete=False) as tmp_mmd: tmp_mmd.write(mermaid_code) input_path = tmp_mmd.name # 生成输出文件路径 output_path = f"{os.path.splitext(input_path)[0]}.{output_format}" # 调用mmdc本地渲染 subprocess.run(['mmdc', '-i', input_path, '-o', output_path], check=True) # 显示图片 if output_format == 'png': display(Image(output_path)) elif output_format == 'svg': display(SVG(output_path)) # 清理临时文件 os.remove(input_path) os.remove(output_path) # 使用示例 render_mermaid_local(""" graph LR X[输入] --> Y[处理] Y --> Z[输出] """, output_format='svg')
优点:完全不依赖远程服务,代理环境下无网络限制;生成的图片会被嵌入Notebook,GitHub可直接显示。
方案3:配置Jupyter全局代理
修改Jupyter配置文件,让所有网络请求默认走代理:
- 生成Jupyter配置文件(如果没有):执行
jupyter notebook --generate-config - 打开生成的
jupyter_notebook_config.py,添加以下代码:
import os # 替换为你的代理地址 os.environ['HTTP_PROXY'] = 'http://your-proxy-address:port' os.environ['HTTPS_PROXY'] = 'http://your-proxy-address:port'
- 重启Jupyter Notebook后生效。
优点:一次配置全局生效,无需修改每个绘图代码。
内容的提问来源于stack exchange,提问作者dudung
相关产品推荐
相关产品推荐

