diagrams 安装与快速上手:从配置 Graphviz 依赖到生成第一张云架构图

📅 发布时间:2026/9/6 18:54:36
diagrams 安装与快速上手:从配置 Graphviz 依赖到生成第一张云架构图 diagrams 安装与快速上手从配置 Graphviz 依赖到生成第一张云架构图【免费下载链接】diagrams:art: Diagram as Code for prototyping cloud system architectures项目地址: https://gitcode.com/GitHub_Trending/di/diagrams本文基于 diagrams 仓库的入门文档 installation.md系统讲解 diagramsDiagram as Code用代码描述云系统架构的完整安装流程环境要求、Graphviz 系统依赖的配置、三种 Python 包管理器的安装方式以及通过十几行 Python 代码生成第一张 AWS 架构图的快速上手步骤。读完本文你可以独立完成 diagrams 的安装验证理解Diagram上下文管理器的渲染机制与输出文件命名规则并能根据 Diagram 类源码 正确调整方向、输出格式等渲染参数。环境要求Python 版本与 Graphviz 系统依赖diagrams 的渲染管线分为两层Python 包负责以代码方式构建有向图底层的Graphviz引擎负责把图布局并渲染为图片。因此两者缺一不可。Python 版本入门文档 installation.md 中写的是Python 3.7 或更高版本但需要注意当前仓库的实际要求已经提高pyproject.toml 中声明python ^3.9即当前版本0.24.1要求Python 3.9 及以上README.md 也明确写有 It requires Python 3.9 or higher。因此以当前仓库为准安装前请先确认 Python 版本$ python --versionGraphviz 系统依赖Graphviz 是操作系统级别的依赖不能通过 pip 安装需要单独安装。不同平台可以这样装# macOS Homebrew $ brew install graphviz # Windows Chocolatey $ choco install graphvizLinux 用户可通过发行版包管理器如apt/dnf安装graphviz。安装后可用dot -V验证 Graphviz 是否可用。注意区分两个 graphviz一个是操作系统里的Graphviz 引擎提供dot等可执行程序另一个是 Python 生态中的graphviz 封装包。pyproject.toml 中对后者有明确版本约束graphviz 0.13.2,0.21.0并依赖jinja2 2.10,4.0用于图标资源的处理这些会在安装 diagrams 时由 pip 自动解决。安装 diagrams安装好 Graphviz 后或系统已具备时即可通过常用的 Python 包管理器安装 diagrams# 使用 pip或 pip3 $ pip install diagrams # 使用 pipenv $ pipenv install diagrams # 使用 poetry $ poetry add diagrams安装成功后diagrams包会随包内置各云厂商AWS、Azure、GCP、阿里云、K8s、On-Prem 等的图标资源from diagrams.aws.compute import EC2之类的导入语句即可直接使用无需额外下载图标。快速上手生成第一张架构图安装完成后创建一个diagram.py文件写入以下代码# diagram.py from diagrams import Diagram from diagrams.aws.compute import EC2 from diagrams.aws.database import RDS from diagrams.aws.network import ELB with Diagram(Web Service, showFalse): ELB(lb) EC2(web) RDS(userdb)执行$ python diagram.py运行结束后当前工作目录会生成web_service.png即入门文档中展示的 Web Service 架构图上文配图一个 ELB 负载均衡指向 EC2 实例再指向 RDS 数据库。输出文件名是怎么来的Web Service 为什么会变成web_service.png从 diagrams/init.py 的Diagram.__init__可以看到文件名生成逻辑如果显式传入了filename参数不含扩展名则直接使用如果没传filename则用_.join(self.name.split()).lower()把name按空格拆分、转小写、用下划线连接——Web Service 就变成了web_service如果name和filename都没传默认使用diagrams_image作为文件名。生成流程的源码视角with Diagram(...)是一个上下文管理器渲染发生在上下文退出时。从 diagrams/init.py 的实现看def __enter__(self): setdiagram(self) return self def __exit__(self, exc_type, exc_value, traceback): self.render() # Remove the graphviz file leaving only the image. os.remove(self.filename) setdiagram(None)__enter__把当前Diagram写入contextvars全局上下文见 第 9-15 行之后创建的每个节点Node和集群Cluster都会通过getdiagram()自动关联到当前图无需手动传参__exit__调用render()触发 Graphviz 渲染随后删除临时的.dot中间文件只保留最终图片Node的、-、运算符重载diagrams/init.py分别实现单向连接默认无方向前向连接后向连接这就是ELB(lb) EC2(web) RDS(userdb)一行代码能串联三个组件的底层机制。Diagram 参数速查结合 diagrams/init.py 中Diagram.__init__的签名与文档字符串Diagram(...)的完整参数如下参数类型默认值说明namestr图名用作图表标题未给filename时据此生成输出文件名filenamestr输出文件名不含扩展名未给则由name生成directionstrLR数据流方向取值TB/BT/LR/RL对应rankdircurvestylestrortho连线弯曲样式取值ortho或curvedoutformatstr或list[str]png输出格式可选png、jpg、svg、pdf、dot列表形式可一次输出多种格式autolabelboolFalse为True时自动在节点标签前加上类名前缀showboolTrue为True时渲染完自动打开图片为False时仅保存脚本/CI 场景建议设为FalsestrictboolFalse渲染时是否合并多重边graph_attr/node_attr/edge_attrdictNone覆盖默认 Graphviz 属性dot配置例如默认图属性包含pad2.0、splinesortho、nodesep0.60等见 diagrams/init.py几个实用取值示例Diagram(Web Service, showFalse, directionTB)改为自上而下布局适合纵向分层架构Diagram(Web Service, outformat[png, svg])同时导出位图与矢量图Diagram(Web Service, curvestylecurved)把正交折线换成曲线连接。下一步更多组合示例分组 Worker、集群服务、K8s 部署、带颜色的 Edge 连线、Custom 自定义图标节点等见 examples.md对Diagram、Cluster、Node、Edge的详细用法见 docs/guides/diagram.md、docs/guides/cluster.md、docs/guides/node.md 与 docs/guides/edge.md各云厂商全部可用节点图标列表按厂商整理在 docs/nodes/ 目录下如 docs/nodes/aws.md、docs/nodes/k8s.md 等。需要再次强调适用前提本文环境要求以当前仓库为准——Python 3.9 与系统级 Graphviz这与较早期文档中 Python 3.7 的说法不同实际安装前请以 pyproject.toml 的依赖声明为准确认。【免费下载链接】diagrams:art: Diagram as Code for prototyping cloud system architectures项目地址: https://gitcode.com/GitHub_Trending/di/diagrams创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考