# boardwise 安装(给朋友看的版本)
这份文档只讲**怎么把 boardwise 装到你这台 Windows 机器上**,大概 20 到 30 分钟。
装完之后怎么用,看 [`getting-started.md`](getting-started.md)(那份六步走,每一步都带真机截图)。
面向的是**硬件工程师**:你不需要会写代码,但要在命令行里敲几条命令、在编辑器里点几下。
凡是需要你动手的地方,本文都写了"应该看到什么"和"不对怎么办"。
## 第 0 步 · 拿到仓库
同事(xianyuyijinban)会把两样东西发给你:**仓库压缩包**(zip)和**扩展文件**(`.eext`)。
1. 把 zip 解压到一个你有写权限、路径里**没有中文和空格**的目录,比如 `E:\boardwise`——
下面所有"在仓库目录里敲"说的就是它;
2. `.eext` 先放桌面就行,第 3 步才用。
> 仓库目录装完**别删也别挪**(原因见第 2 步末尾)。
## 你需要准备什么
| 东西 | 要求 | 没有怎么办 |
|---|---|---|
| Windows | 10 或 11 | — |
| 立创 EDA Pro | **3.2.149 或更高**(推荐最新版) | 到 下载桌面版 |
| Python | **3.10 或更高** | 见第 1 步,官网下载;安装脚本没找到会给你链接 |
| Node.js | 20.15 以上(**只有你自己构建扩展才需要**) | 同事给你 `.eext` 的话不用管 Node |
| 网络 | 能访问 PyPI(装 Python 包用) | 公司内网要配代理或换镜像,见"常见问题" |
> **一次只开一个编辑器窗口。** 每个窗口里的扩展都会各自连上 daemon;0.4.11 起 daemon 只认
> 先到的那一个,后来者的连接会被直接拒绝(daemon 窗口会打印一行提示),活跃窗口不受影响。
> 所以开着多个窗口时,只有先连上的那个窗口能用 boardwise——为避免搞混,把多余的编辑器窗口关掉。
## 五步速览
| 步骤 | 你要做的 | 做完的标志 |
|---|---|---|
| 1 | 装 Python 3.10+ | 命令行里 `python --version` 有输出 |
| 2 | 双击 `scripts\install.bat` | 最后打印"下一步",`.venv` 建好、boardwise 装上 |
| 3 | 编辑器里导入 `boardwise-connector-*.eext`,**然后完全重启编辑器** | 顶栏出现 `boardwise` 菜单 |
| 4 | (可选)双击 `scripts\start-daemon.bat`,窗口保持开着 | 窗口里出现带指纹的"配对"公告;不做这步也行——需要桥的命令会自己拉起 daemon(见第 4 步) |
| 5 | 命令行跑 `boardwise doctor` | 八行全绿(第一行是离线安装版本预检,编辑器太旧会先在这里红) |
> **命令怎么写**:本文里的 `boardwise xxx` 都指 boardwise 命令。装完之后它不在你的 PATH 上,
> 所以在仓库目录里用**完整写法**最省事:
> `.venv\Scripts\python.exe -m boardwise.cli xxx`(比如 `.venv\Scripts\python.exe -m boardwise.cli doctor`)。
> 想少敲一点就先激活虚拟环境:`.venv\Scripts\activate.bat`,之后 `boardwise` 和上面等价;
> 关掉窗口就失效,下次要重新激活。
---
## 第 1 步 · 装 Python
到官网下载:(选 **3.10 以上**的稳定版)。
安装时**务必勾上 `Add python.exe to PATH`**(把 Python 加进命令行能找得到的地方)。
装完打开"命令提示符"(开始菜单搜 `cmd`),敲:
```bat
python --version
```
预期:打印 `Python 3.1x.x`。
不对怎么办:
- 提示"不是内部或外部命令":PATH 没勾上,重新运行安装程序选 `Modify` → 勾上 `Add python.exe to PATH`。
- 弹出去微软商店:那是 Windows 自带的"占位"python,不算安装。照上面装官网版本,
装完**关掉这个命令行窗口重开**(PATH 才会生效)。
- 已经装过 3.8/3.9:不用卸载,装个新版即可。
> 截图位:`docs/images/install-01-python-version.png` —— `python --version` 的输出。
---
## 第 2 步 · 双击 `scripts\install.bat`
这个脚本放在仓库的 `scripts\` 文件夹里,双击它就行。它会依次做六件事,每一步都有中文提示:
1. 找 Python(3.10 以上),找不到就给你官网链接并退出;
2. 在仓库目录里建虚拟环境 `.venv`(已经有了就复用,不会覆盖);
3. 把 pip 升到新版(失败不致命,会提示你继续);
4. 装 boardwise 本身(`pip install -e .`,联网从 PyPI 下载 `websockets`);
5. 问你一句**要不要装开发依赖**(`pip install -e ".[dev]"`,就是 pytest)——
**不管它、直接按回车就行**;只有真去跑仓库自带的测试才用得到它,
想跳过就输入 `n`;
6. 跑一遍 `boardwise doctor`,然后打印"下一步"。
预期:窗口最后停在"下一步,按顺序:"那段话。在第 5 步它会停下来等你按一下回车。在这之前会看到一句
`doctor 退出码 1:现在有红项。`——**首次装完 doctor 是红的很正常**,
因为编辑器还没装扩展(第 3 步没做);daemon 那一条现在会自己解决——doctor 需要桥,
发现 daemon 不在就自己拉起来(输出写到 `%USERPROFILE%\.boardwise\log\daemon-<日期>.log`),
所以首次装完那一条通常已经是绿的。脚本会把每条红项的修复建议列出来,照着做即可。
不对怎么办(脚本会直接告诉你原因,这里列最常见的):
- **没有 Python**:装第 1 步,然后重跑本脚本。
- **`pip install` 失败**:多半是网络。公司内网换镜像再试(在仓库目录里敲):
```bat
.venv\Scripts\python.exe -m pip install -e . -i https://pypi.tuna.tsinghua.edu.cn/simple
```
- **权限问题**:把仓库放在你有写权限的目录(比如 `E:\boardwise`),不要放 `C:\Program Files`。
- **第 5 步问你开发依赖、你不想装**:输入 `n` 回车跳过即可,不影响使用;以后要跑仓库自带的
测试时再敲一次 `.venv\Scripts\python.exe -m pip install -e ".[dev]"`。
- **想重装**:直接重跑本脚本;要彻底重来就先删掉 `.venv` 再跑。
两条要知道的规矩:
- **仓库目录别删也别挪**。boardwise 是"就地安装"(editable)的:它按仓库里的相对路径
找 `connector/`、`blocklib/`;目录一挪,`doctor` 会有一项说不清。
- **脚本是 ANSI/GBK 编码,第 2 行用 `chcp 936` 切控制台代码页**。这是 Windows 批处理显示
中文的可靠做法(cmd 按控制台代码页解析批处理文件,UTF-8 批处理会被解析错位)。
用编辑器打开看到乱码时,按 GBK/ANSI 重新打开即可;改动脚本请保留"第 2 行 chcp"这笔。
> 截图位:`docs/images/install-02-bat-output.png` —— `install.bat` 跑完停在"下一步"的画面。
---
## 第 3 步 · 在编辑器里装扩展(`.eext`)
`.eext` 是给编辑器用的插件,负责"替你把话传给编辑器"。**两条路拿它**:
- 同事(xianyuyijinban)已经给你 `boardwise-connector-<版本>.eext`:直接用,跳过下面的构建;
- 自己从仓库构建:双击 `scripts\build-connector.bat`(需要 Node.js 20.15 以上,
脚本会打印产物路径,形如 `connector\boardwise-connector-0.4.11.eext`)。
导入步骤:
1. 立创 EDA Pro → `扩展`(设置里的扩展管理)→ `导入扩展` → 选中那个 `.eext`;
2. **完全关闭编辑器,再重新打开**。这一步不能省:编辑器只在启动时读一次扩展代码,
热导入常常"看起来成功、其实还在跑旧版本";
3. 首页 / 原理图页 / PCB 页的顶栏应该出现 **boardwise** 菜单。
预期:点 `boardwise → About...` 会弹出一个小框,显示连接状态与版本
(`V0.4.11` 之类;**不会**显示 token 本身)。
不对怎么办:顶栏没有 boardwise → 导入没生效,重做本步(记得完全重启编辑器)。
已经装过旧版、想确认编辑器里跑的是哪一版:`boardwise doctor` 的
"运行中的 connector 版本与仓库一致"那一项会分别报出两边版本号;
不一致时用 `boardwise bridge update-connector` 热更新(不用重新导入、不用重启编辑器)。
> 截图位:`docs/images/install-03-import-eext.png` —— 扩展管理页的"导入扩展"按钮与导入后的
> 扩展列表(显示 boardwise Connector 已启用)。
---
## 第 4 步 · daemon 与配对(这一步现在可以跳过)
**你不需要手动起 daemon**:任何需要桥的命令(`bridge status`、`checkup --live`、
`review --mark` …)发现 127.0.0.1:61190 上没人应答,就自己把它拉起来、等它就绪再继续。
它是以**分离进程**起的(不挂在你的终端上,关终端不影响它),输出写在
```text
%USERPROFILE%\.boardwise\log\daemon-<日期>.log
```
命令会告诉你它拉起了 daemon 和这个日志在哪;**没拉起来**时它会把日志末尾几行打在
报错上面,那就是原因。自己管 daemon 的部署(计划任务、服务)用环境变量
`BOARDWISE_NO_AUTO_DAEMON=1` 关掉自动拉起,行为回到从前——命令只管报
`daemon not reachable`,起不起由你决定。
想在**前台**盯着它、亲眼看那条配对公告,才需要双击 `scripts\start-daemon.bat`:
会开一个标题为 **boardwise daemon** 的窗口:
```text
boardwise bridge: listening on 127.0.0.1:61190
token file: C:\Users\<你>\.boardwise\token
audit log: C:\Users\<你>\.boardwise\audit
pairing: C:\Users\<你>\.boardwise\connector-token
waiting for the EasyEDA extension to connect (Ctrl-C to stop)
```
- **这个窗口要保持开着**:关掉它或按 `Ctrl-C` 就等于把桥拆了(自动拉起的那份不受影响,
它下次会被命令再拉一次)。
- 窗口里**每 60 秒会打印一次连接状态**(只打含 `connector:` 的那两行),
这样不用切窗口就知道编辑器连上没有。
- 编辑器里的扩展连上来的**第一次**会自动配对:前台的窗口打印一条带指纹(8 位)的公告
——那就是"这台编辑器被信任了";自动拉起的那份把这条公告写进上面的日志文件里。
之后只有持有那个 token 的连接能进来。
- 要停:双击 `scripts\stop-daemon.bat`,或者直接关掉那个窗口。
- 换端口:先设环境变量 `BOARDWISE_PORT`,`start-daemon.bat` / `stop-daemon.bat` 都认它;
命令行上用 `bridge --port <端口>`(自动拉起的那份也会起在你指的这个端口上)。
配对出问题(换了机器、想重新配对):双击停止脚本后,在仓库目录里敲
```bat
.venv\Scripts\python.exe -m boardwise.cli bridge revoke
```
再重新启动 daemon(或随便跑一条需要桥的命令),下一个连上来的扩展就会被信任。
> 截图位:`docs/images/install-04-daemon-pairing.png` —— daemon 窗口的启动横幅与那条配对公告。
---
## 第 5 步 · 让 `doctor` 全绿
在仓库目录里敲(也可以再双击一次 `install.bat`,它最后就跑这个):
```bat
.venv\Scripts\python.exe -m boardwise.cli doctor
```
它一口气查七件事,**全绿才算装好**(退出码 0),每一条红项都自带修复建议:
| 检查 | 在问什么 | 红了怎么办 |
|---|---|---|
| daemon 可达 | 本机能连上 daemon(不在就自动拉起) | 自动拉起没成功:看日志尾部 `%USERPROFILE%\.boardwise\log\daemon-<日期>.log`,或前台跑一次 `boardwise bridge start` 看它怎么说;端口不同时加 `--port` |
| 扩展已连接 | 编辑器里的扩展真的连上来了 | 打开编辑器、确认扩展启用;不行重做第 3 步 |
| 关键方法在位 | 编辑器暴露了 harness 要用的 5 个接口 | 编辑器太旧,升级立创 EDA Pro |
| 编辑器版本 ≥ 3.2.149 | 低于实测过的最低版本就没有证据 | 升级立创 EDA Pro |
| daemon 版本与本机一致 | 跑着的 daemon 是不是你这份代码 | 重启 daemon(改了代码更要重启) |
| connector 版本与仓库一致 | 编辑器里跑的是不是最新那份 `.eext` | `boardwise bridge update-connector`(热更新,不用重装) |
| 当前工程焦点可读 | 编辑器里有没有打开一个工程 | 打开一个工程再跑 |
想要一份机器可读的报告:加 `--json doctor.json`。断开状态下 doctor 不会崩,
它会逐行说"未验证:……"并退出 1。
> 截图位:`docs/images/install-05-doctor-green.png` —— 全绿的输出(022 起为八行,首行离线安装版本预检;截图待更新)
> (可复用 `gs-04-doctor-green.png` 的画法:真实输出渲染成终端样式)。
---
## 装好了 · 第一次审查
**先导出工程**:在编辑器里导出**工程备份**(`.epro2`,一个文件里同时带原理图和板子数据;
具体的菜单位置随编辑器版本不同,在"导出"相关的菜单里找"工程 / 备份"字样)。
导出对话框里**不要勾"加密"**:加密的导出 boardwise 读不了,它会明确告诉你重新导出、
而不是丢一堆报错给你。
```bat
rem 审查一个工程备份,同时生成人和机器都能读的报告
.venv\Scripts\python.exe -m boardwise.cli review D:\导出\你的板子.epro2 --json report.json --md report.md
rem 把发现画到编辑器画布上(需要 daemon、编辑器里打开着对应原理图页;daemon 不在会自动拉起)
.venv\Scripts\python.exe -m boardwise.cli review-mark report.json
rem 看完清掉标记
.venv\Scripts\python.exe -m boardwise.cli review-mark clear
```
`review` 的退出码:`1` 表示有 ERROR 级发现(是"发现问题",不是命令失败)、`0` 表示没有、
`2` 表示文件读不了、`3` 表示**读出来是空的**(0 器件 0 网络:归档可能被截断/损坏,或
`--view pcb` 看了一份只有原理图的导出)——073 起"没读到"不再是 `0`,CI 里别当通过。
在线审(`--live`)同一档:拿到了模型、但模型是空的(0 器件 0 网)也退 `3`(075)。
`.epro2` 的 `--view` 缺省是 `schematic`(设计真相);要审板级内容
(焊盘 / 走线 / 过孔)显式加 `--view pcb`——它读 PCB 文档自己那份副本,原理图改了而板子没
同步时那份副本是旧的。点名 `--view pcb` 而导出里只画了原理图时读到的是 0 器件 0 网络,
终端和 `--md` 报告都会提示改回 `--view schematic`。
全部参数看 `boardwise review --help`;
`review-mark` 的用法、截图注意事项(`bridge screenshot` 在 3.2.186 上返回的是缓存空帧,
别拿它当证据)见 [`getting-started.md`](getting-started.md) 第 5 步。
> 截图位:`docs/images/install-06-first-review.png` —— 第一次 `review` 的终端输出与 `report.md` 的开头。
---
## 常见问题
| 症状 | 先看什么 |
|---|---|
| `python` 命令找不到 / 弹去商店 | 第 1 步,重装并勾 `Add python.exe to PATH`,然后重开命令行窗口 |
| `pip install` 报网络错 | 换镜像(见第 2 步),或确认代理设置 |
| 顶栏没有 `boardwise` 菜单 | 第 3 步没生效:重导 `.eext` 并**完全重启编辑器** |
| 任何 `boardwise bridge …` 说 `daemon not reachable` | 自动拉起也没成功——看报错上面那几行日志尾部(文件在 `%USERPROFILE%\.boardwise\log\`);或前台跑 `boardwise bridge start` 看原因。真的不需要自动拉起就用 `BOARDWISE_NO_AUTO_DAEMON=1` |
| 报 `UNKNOWN_ACTION` | daemon 是旧的:先停掉它(`scripts\stop-daemon.bat`),再随便跑一条需要桥的命令——它用你手上这份新代码重新拉起;不想自动拉起就前台跑 `boardwise bridge start` |
| 报 `NO_CONNECTOR` | 编辑器没连上:`boardwise → About...` 看状态,不行重做第 3 步 |
| 报 `PAGE_MISMATCH` | 编辑器焦点不在你以为的那一页/那块板上:切过去,或先 `bridge call --action doc.list` |
| 打标成功但画布上看不到 | 标记画在**最后聚焦的那块画布**上:用 `--page ` 指定,或先点一下目标页 |
| 命令打到了别的窗口 | 你开了多个编辑器窗口:只留一个(见开头那段警告) |
| 想看 boardwise 到底做了什么 | `C:\Users\<你>\.boardwise\audit\` 里当天日志,每个动作都有记录 |
装好之后想做什么:仓库根目录的 [`README.md`](../README.md);桥的协议与全部动作见
[`docs/bridge.md`](bridge.md)。
## 给维护者(这段不是朋友看的)
- **开发依赖在 `[project.optional-dependencies]` 里**(`pyproject.toml`:`dev = ["pytest"]`)。
pytest 以前只出现在 `[tool.pytest.ini_options]`——那是**配置,不是依赖**,所以全新 clone
按本装完仍然 `No module named pytest`(issue #2)。开发机一装就能跑三线:
`.venv\Scripts\python.exe -m pip install -e ".[dev]"`;`install.bat` 第 5 步会问一次。
- `scripts\*.bat` 是 **GBK/ANSI + CRLF**,第 2 行 `chcp 936`。原因见第 2 步末尾:
cmd 按控制台代码页解析批处理文件,UTF-8 + `chcp 65001` 会被解析错位(实测会出现
"把某一行的尾巴当命令执行")。改脚本时不要把它存成 UTF-8,也不要删 `chcp` 那一行。
- 四个脚本各自的作用:`install.bat`(装 Python 环境)、`start-daemon.bat` / `stop-daemon.bat`
(起停 daemon)、`build-connector.bat`(打 `.eext`)。
- 详细调查(打包流程、Python 包现状、doctor 覆盖范围、脚本的静态与实测验证)见
`outputs/018_packaging_survey.txt`。