OpenClaw 作为一套需要同时牵涉 Python 运行环境、系统服务、网络监听与安全策略的组件,在 Linux 上部署相对顺畅,但一旦搬到 Windows,路径分隔符、权限模型、防火墙与杀毒软件拦截机制都会成为隐性雷区。
很多同学按照官方文档一路执行,结果不是启动报 FileNotFoundError,就是端口明明监听了外部却连不上,甚至刚下载的安装包被 Defender 直接“吞掉”。究其原因,Windows 与 Linux 在以下四个层面存在本质差异:
本文将按“环境准备 → 路径 → 权限 → 拦截解决 → 完整部署流程 → 常见故障排查”的顺序,把 Windows 部署 OpenClaw 的坑一次性梳理清楚。
推荐使用 Windows 10 22H2 及以上,或 Windows 11 21H2 及以上。家庭版虽然也能部署,但部分本地策略(gpedit.msc)和容器功能会缺失,优先建议专业版或企业版。
在 PowerShell 中确认版本:
|
1 2 |
winver systeminfo | findstr /B /C:"OS Name" /C:"OS Version" |
| 组件 | 推荐版本 | 说明 |
|---|---|---|
| Python | 3.10 / 3.11 | 过高版本可能遇到依赖未适配问题 |
| Git | 最新版 | 便于拉取 OpenClaw 源码 |
| Visual C++ 运行库 | 2015-2022 | 缺失会导致 DLL load failed |
| OpenClaw | 项目指定版本 | 建议使用发布版而非每日构建 |
安装 Python 时务必勾选 “Add python.exe to PATH”,否则后续所有命令都要写绝对路径,这是第一颗最常见的雷。
|
1 2 3 |
python --version pip --version git --version |
如果 python 提示不是内部或外部命令,说明 PATH 未生效,重新打开终端或手动添加:
|
1 |
[Environment]::SetEnvironmentVariable("Path", "$env:Path;C:\Python311;C:\Python311\Scripts", "User") |
Windows 路径以 \ 分隔,但在 Python 字符串中 \ 是转义字符。配置文件中常见错误:
|
1 2 3 4 5 6 7 8 9 10 11 |
# 错误:\U、\n、\t 会被当作转义 config_path = "C:\Users\new\OpenClaw\config.yaml"
# 正确之一:原始字符串 config_path = r"C:\Users\new\OpenClaw\config.yaml"
# 正确之二:正斜杠(Windows 也支持) config_path = "C:/Users/new/OpenClaw/config.yaml"
# 正确之三:双反斜杠 config_path = "C:\\Users\\new\\OpenClaw\\config.yaml" |
很多用户把项目放在 C:\Program Files\OpenClaw 或 C:\Users\Zhang San\OpenClaw,路径里的空格会导致 Shell 命令解析错误。
不建议将运行目录放在 Program Files,因为该目录受系统保护且带空格。建议部署目录:
|
1 2 3 4 5 6 |
# 推荐:无空格、层级浅 C:\OpenClaw D:\OpenClaw
# 次选:用户名无空格 C:\Users\admin\OpenClaw |
如果路径必须包含空格,引用时务必加引号:
|
1 2 |
Set-Location "C:\Program Files\OpenClaw" python "C:\Users\Zhang San\OpenClaw\app.py" |
Windows 用户名是中文时,%USERPROFILE% 会包含中文字符,可能导致 Python 读取文件时编码错误或第三方库无法识别。
临时解决方案:
|
1 2 |
mkdir C:\OpenClaw python -X utf8 C:\OpenClaw\app.py |
永久方案是在系统环境变量中设置:
|
1 2 |
[Environment]::SetEnvironmentVariable("PYTHONUTF8", "1", "User") [Environment]::SetEnvironmentVariable("PYTHONIOENCODING", "utf-8", "User") |
注意:追加环境变量时如果原变量已存在,上面的 SetEnvironmentVariable 会覆盖整个变量。若只想追加 Path,应先读取旧值再拼接。
OpenClaw 启动时常把工作目录当作基准路径读取配置、日志和静态资源。如果你在 C:\ 或桌面用绝对路径启动 python C:\OpenClaw\app.py,程序内部使用相对路径时就会找不到文件。
正确启动姿势:必须先切换到项目目录
|
1 2 |
cd C:\OpenClaw python app.py |
如需后台运行,使用 Start-Process 并指定工作目录:
|
1 |
Start-Process -FilePath "python" -ArgumentList "app.py" -WorkingDirectory "C:\OpenClaw" -WindowStyle Hidden |
OpenClaw 默认可能在安装目录下写日志或缓存。当安装目录位于 Program Files 或 C:\ 根目录时,普通用户通常没有写权限。建议在配置文件里显式指定可写目录:
|
1 2 |
log_path: "C:/OpenClawData/logs" data_path: "C:/OpenClawData/data" |
并预先创建:
|
1 |
New-Item -ItemType Directory -Force C:\OpenClawData\logs, C:\OpenClawData\data |
OpenClaw 若需要监听 80、443 等小于 1024 的端口,或写入 Program Files、注册服务,通常需要管理员权限。但“贪方便一直用管理员”也会带来隐患:管理员启动后创建的文件、日志、配置可能归管理员账户所有,普通用户后续无法改动。
建议策略:
以管理员身份启动 PowerShell:
|
1 |
Start-Process powershell -Verb RunAs |
运行 OpenClaw 的安装脚本或启动脚本时,如果遇到:
|
1 |
无法加载文件 xxx.ps1,因为在此系统上禁止运行脚本 |
说明当前执行策略为 Restricted。查看策略:
|
1 |
Get-ExecutionPolicy -List |
为当前用户放开脚本执行:
|
1 |
Set-ExecutionPolicy -Scope CurrentUser RemoteSigned |
恢复原策略:
|
1 |
Set-ExecutionPolicy -Scope CurrentUser Restricted |
如果普通用户无法写入或读取某些目录,可以手动授予当前用户完全控制权限:
|
1 |
icacls "C:\OpenClaw" /grant "$env:USERNAME:(OI)(CI)F" /T |
(OI)(CI) 表示对象继承和容器继承,F 为完全控制,/T 递归应用到子目录和文件。注意 Windows 路径带空格时记得用双引号包裹。
生产环境建议把 OpenClaw 注册成 Windows 服务,实现开机自启和崩溃自动重启。以 Python 项目为例,可借助 NSSM:
|
1 2 3 4 5 |
nssm install OpenClaw "C:\Python311\python.exe" "C:\OpenClaw\app.py" nssm set OpenClaw AppDirectory "C:\OpenClaw" nssm set OpenClaw AppStdout "C:\OpenClawData\logs\stdout.log" nssm set OpenClaw AppStderr "C:\OpenClawData\logs\stderr.log" nssm start OpenClaw |
服务账户默认是 LocalSystem,权限很高;如果 OpenClaw 需要访问网络共享或特定凭据,应在服务属性里配置专用账户,并确保该账户对项目目录有读写权限。
OpenClaw 既需要监听本地端口(入站),也可能需要调用外部 API(出站)。默认情况下 Windows 防火墙对出站通常放行,但一些企业策略会严格限制。
放行入站端口(以 8080 为例):
|
1 |
New-NetFirewallRule -DisplayName "OpenClaw 8080" -Direction Inbound -Protocol TCP -LocalPort 8080 -Action Allow |
检查端口监听状态:
|
1 |
netstat -ano | findstr :8080 |
如果 0.0.0.0:8080 表示监听所有网卡,127.0.0.1:8080 表示仅本机可访问,需要检查配置是否把 host 写成了 localhost 或 127.0.0.1。
下载 OpenClaw 安装包或运行释放器时,Windows Defender 可能因启发式扫描或误报直接隔离文件。
排障步骤:
|
1 2 3 4 5 |
# 查看隔离历史 Get-MpThreatDetection | Format-List
# 查看被隔离项目 Get-MpThreat | Format-List |
处理建议:
|
1 2 |
Add-MpPreference -ExclusionPath "C:\OpenClaw" Add-MpPreference -ExclusionPath "C:\OpenClawData" |
恢复后可关闭实时保护再重试,但部署完成后建议重新开启:
|
1 2 3 |
Set-MpPreference -DisableRealtimeMonitoring $true # 完成后 Set-MpPreference -DisableRealtimeMonitoring $false |
双击安装包时若出现“Windows 已保护你的电脑”,说明 SmartScreen 提示未知发布者。点击“更多信息 → 仍要运行”即可。
360、火绒、腾讯管家等第三方安全软件可能拦截 OpenClaw 的进程、端口监听或 DLL 注入。常见表现:
排查方法:
如果公司网络或本机开启了 HTTP 代理,OpenClaw 调用外部 API 时可能被代理拦截或返回 407 认证错误。可在项目配置中显式设置代理:
|
1 2 3 |
import os os.environ["HTTP_PROXY"] = "http://127.0.0.1:7890" os.environ["HTTPS_PROXY"] = "http://127.0.0.1:7890" |
直连请求需要绕过代理时设置:
|
1 |
os.environ["NO_PROXY"] = "localhost,127.0.0.1,192.168.0.0/16" |
OpenClaw 需要连接远程 API 时,如果 DNS 被污染或 hosts 配置错误,会出现超时或 getaddrinfo failed。可在 C:\Windows\System32\drivers\etc\hosts 中手动指定 IP 与域名映射,修改后需要管理员权限保存,并刷新 DNS:
|
1 |
ipconfig /flushdns |
|
1 2 |
mkdir C:\OpenClaw cd C:\OpenClaw |
|
1 2 3 4 |
git clone https://github.com/your-org/OpenClaw.git . python -m venv venv .\venv\Scripts\Activate.ps1 pip install -r requirements.txt |
如果 Activate.ps1 被执行策略拦截,参考 4.2 节放开当前用户脚本权限。
编辑 config.yaml,重点确认路径与监听地址:
|
1 2 3 4 |
host: "0.0.0.0" port: 8080 log_path: "C:/OpenClawData/logs" data_path: "C:/OpenClawData/data" |
|
1 |
New-NetFirewallRule -DisplayName "OpenClaw 8080" -Direction Inbound -Protocol TCP -LocalPort 8080 -Action Allow |
|
1 2 |
cd C:\OpenClaw python app.py |
另开终端验证:
|
1 2 |
netstat -ano | findstr :8080 curl http://127.0.0.1:8080/health |
|
1 2 3 |
nssm install OpenClaw "C:\OpenClaw\venv\Scripts\python.exe" "C:\OpenClaw\app.py" nssm set OpenClaw AppDirectory "C:\OpenClaw" nssm start OpenClaw |
| 现象 | 可能原因 | 解决方法 |
|---|---|---|
| python 不是内部或外部命令 | 未勾选 Add to PATH | 重装或手动加 PATH |
| DLL load failed while importing xxx | 缺少 VC++ 运行库 | 安装 VC++ 2015-2022 |
| No such file or directory: config.yaml | 工作目录不对 | 先 cd 到项目目录再启动 |
| [Errno 13] Permission denied | 目录/文件无写权限 | 换有写权限的目录或 icacls 授权 |
| 端口监听但外部无法访问 | 防火墙/安全软件拦截 | 放行入站规则、加入白名单 |
| 端口为 127.0.0.1 而非 0.0.0.0 | host 配成了 localhost | 改 host: 0.0.0.0 |
| 启动即退出、无日志 | 杀毒软件静默拦截 | 加入白名单后重试 |
| PowerShell 禁止运行脚本 | 执行策略 Restricted | Set-ExecutionPolicy -Scope CurrentUser RemoteSigned |
| 外部 API 调不通 | 代理拦截/无出站规则 | 配置代理或绕过代理 |
| 下载的文件“消失” | Defender 隔离 | 恢复并添加排除目录 |
Windows 部署 OpenClaw 的坑看似杂乱,其实可以归纳为一条主线:先解决“路径对不对”,再解决“权限够不够”,最后排查“有没有被拦截”。
把这三个维度排查清楚,绝大多数启动失败、端口不通、文件丢失的问题都能迎刃而解。建议把这套检查顺序固化成你的排障清单,下次遇到 Windows 部署问题直接从路径开始排查,会比盲目搜报错高效得多。