ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

Windows 11 AI开发环境搭建实战:WSL2+Docker+Ollama+Codex

Windows 11 AI开发环境搭建实战:WSL2+Docker+Ollama+Codex 2026年还在怀疑Windows能不能搞AI开发真的可以把顾虑放下了。这几年AI编程工具、本地模型和容器化的成熟度已经把Windows从“勉强能装环境”推进到“能当主力开发机”的阶段。我最近在Windows 11上从零搭了一套AI编程环境从终端、WSL2、Python运行时、Docker中间件到本地大模型和Codex这类AI编程助手整条链路全部走通。这篇文章就是把每一步的选型逻辑、安装步骤和踩坑记录写下来不分Mac党还是Windows党你只需要一台能联网的电脑。先说结论这套环境最终的骨架是Windows Terminal WSL2(Ubuntu) Miniconda Docker Desktop Ollama VS CodeAI编程助手以OpenAI Codex CLI为主同时也会讲怎么把VS Code里的AI插件接到本地模型上。无论你是刚开始学编程、只有Windows电脑的学生还是想在办公电脑上搭建本地AI开发环境的开发者都可以按这个顺序一步步来。不要一上来就追求装几十个工具先把主干立住后面的扩展都是在这条主干上长出来的。1. 为什么这套架构是Windows AI开发的参考答案过去十年凡是讲AI开发环境的教程默认几乎都是macOS终端好看、Python原生依赖好装、CUDA踩坑少。但到了现在Windows端的情况已经完全改变。普通消费级Windows PC面临的主要矛盾不再是“能不能跑”而是“怎么用最少的折腾把它拼起来”。WSL2补上了类Linux环境的空白Windows Terminal解决了终端体验Docker Desktop完成了容器化本地模型工具链也陆续给出了原生Windows客户端。我花了两天时间重装三次系统最终固定下来一套组合就是上面那串名字。这套结构可以拆成六个层次每一层解决一个特定问题系统层Windows 11开启开发者模式WSL2作为虚拟化底座不是可有可无的选项。终端层Windows Terminal PowerShell 7负责Windows侧的交互WSL2里则用Ubuntu自带的bash。运行时层Miniconda管Python版本和重型依赖venv管项目级隔离。容器层Docker Desktop以WSL2为后端Redis、Elasticsearch这类中间件全部容器化不污染宿主机。模型层Ollama负责本地大模型的下载与推理Open WebUI负责网页聊天界面二者通过OpenAI兼容接口向外暴露。编码层VS Code主编辑器Codex CLI做终端的AI编程代理Continue、Cline这类插件负责和本地模型对接。为什么按这个顺序排核心原因是“隔离故障”。每一层都能独立验证不会出现装完了才发现是上一层的锅。比如本地模型回答得不对你先测Ollama本身再测Open WebUI再测VS Code插件链路不串。这一点在Windows上尤其重要因为Windows的错误提示往往比Linux更“温和”反而不容易看出问题根源。这篇指南适合三类人刚接触AI编程、手里只有Windows电脑的学生想在公司合规电脑上搭建本地AI开发环境的开发者以及单纯想让手头PC发挥余热的爱好者。如果你已经有一台很稳定的Mac开发机也可以看但重点放在Windows特有的坑上。2. 环境地基把终端、WSL2和Git按正确顺序装好我见过太多人第一步就装错。先装Python再装Git再装WSL2结果PATH混乱、shell不对最后某个工具找不到命令。推荐的顺序是先装终端与包管理再装WSL2最后装Git并做版本管理配置。2.1 用winget一次性补齐Windows Terminal与PowerShell 7打开管理员PowerShell直接跑两条命令winget install --id Microsoft.WindowsTerminal -e winget install --id Microsoft.PowerShell -e这两个工具不属于“可有可无的优化”而是后续所有操作的地基。Windows Terminal能统一管理PowerShell、Cmd和WSL标签页复制粘贴、分屏、字体渲染都比老控制台好一整个量级。PowerShell 7比系统自带5.1版本命令兼容性更强pip、conda、npm这些工具在它下面输出也更稳定。装完后去设置里打开“开发者模式”设置 - 隐私和安全性 - 开发者选项 - 开发人员模式。这一步会自动放宽部分脚本执行权限允许创建符号链接对后面安装node_modules、运行AI项目都能少碰很多权限障碍。装完一定要重启终端PowerShell不会再自动识别新装的东西这是Windows开发环境最常见的一个隐性坑。2.2 WSL2不是虚拟机是通往Linux工具链的桥WSL2安装比很多人想象的简单。管理员PowerShell执行wsl --install自动完成后重启电脑再用管理员PowerShell执行wsl --list --online wsl --install -d Ubuntu-24.04第一次启动Ubuntu会让你创建用户名和密码记好这个密码后面sudo要频繁用到。装完务必执行一次wsl --set-default-version 2默认发行版可能还是WSL1那很多依赖Linux内核的特性会失效。检查当前发行版版本wsl -l -v如果VERSION列显示2说明已经对了。还有一个必须处理的细节Ubuntu默认装在C盘AI项目里动辄几个GB的模型、容器镜像、conda环境会迅速把C盘吃满。建议拿到电脑第一天就把发行版迁到D盘。方法是wsl --shutdown wsl --export Ubuntu-24.04 D:\wsl\ubuntu-backup.tar wsl --unregister Ubuntu-24.04 wsl --import Ubuntu-24.04 D:\wsl\Ubuntu-24.04 D:\wsl\ubuntu-backup.tar注意export/import方式会重置默认用户为rootimport完成后你要手动改回普通用户否则后面所有文件都属于rootVS Code Remote-WSL连进去操作很别扭。在新版Windows 11上如果直接支持wsl --install --location参数建议优先用这个方式能省掉上面的折腾。2.3 Git for Windows不只是代码管理还是依赖工具Git在Windows上有官方安装包winget也能装winget install --id Git.Git -e安装时有一个选项很容易被忽略换行符处理方式。我建议选“Checkout as-is, commit as-is”或者装好后手动设置git config --global core.autocrlf input git config --global core.eol lfWindows默认的CRLF换行会让shell脚本、Dockerfile、Python文件在WSL或容器里出现诡异报错明明代码没问题就是跑不起来。这个设置能提前挡掉一大批这类问题。Git还有一个作用容易被忽略很多AI开发依赖的包管理器会调用git拉源码比如部分npm包、pip的git协议安装。它不是你写代码才用是整个工具链的一部分。装完记得执行一次git config --global user.name和user.email省得后面跑AI工具自动提交时代码里出现错误的提交者信息。3. Python环境双轨制Miniconda管版本venv管项目Python是AI开发的核心运行时但它恰恰是Windows上最容易出问题的环节。原生Python安装器能跑可一旦涉及numpy、pytorch这类带编译组件的包“缺MSVC运行库”“wheel不兼容”“版本冲突”就开始轮番轰炸。我的方案是双轨制Miniconda管版本和重型依赖venv管具体项目。3.1 为什么我依然推荐MinicondaMiniconda的conda包管理器最大价值不是“虚拟环境”这个概念而是它提供的预编译包。Windows上很多Python包没有官方wheel编译需要正确版本的MSVCconda-forge维护的包把这些预编译工作做完了装pytorch、cudnn这类东西时尤其省心。但它也不是万能药。conda解决环境依赖的能力很强解析速度却一直被人诟病而且环境目录大了之后迁移麻烦。所以日常开发我采用“双轨制”用conda创建一个基础环境里面有Python、pip、常用编译工具只在需要做数据科学、机器学习时使用。对每个具体项目用venv创建轻量独立环境目录放在项目里删掉不心疼。这样既享受了conda对重型依赖的照顾又保持了项目之间的干净隔离。3.2 安装与基础命令安装Miniconda同样可以用wingetwinget search miniconda先搜出实际ID再执行安装。装完打开Anaconda Prompt或者重启PowerShell后先做三件事conda update -n base conda conda config --add channels conda-forge conda config --set channel_priority strict第二、三条是让包解析优先走conda-forge渠道很多Windows下的疑难依赖都能在这个渠道里找到预编译版本。之后记得把conda的libmamba求解器装上解析速度快很多conda install -n base conda-libmamba-solver conda config --set solver libmamba创建环境的标准操作conda create -y -n ai python3.12 pip conda activate ai这里有个Windows细节conda init会把初始化脚本写进PowerShell profile但只在新的PowerShell窗口生效。你装完立刻在老窗口执行conda activate会找不到命令重开终端即可。3.3 conda与pip混用踩过的坑“conda pip”混用几乎每个Windows AI项目都会遇到我也栽过跟头。典型案例先用pip install fastapi装好了依赖之后为了装GPU版torch又执行conda install pytorch-cudaconda在解析时发现依赖树里有它不认识的pip包就可能回滚或者覆盖部分包信息最后fastapi莫名其妙起不来。我后来总结出一条操作纪律安装顺序有讲究。先把conda能覆盖的重型依赖装完再用pip装纯Python包。比如conda create -y -n myproj python3.12 pytorch::pytorch torchvision torchaudio cpuonly conda activate myproj pip install fastapi uvicorn openai redis另一个原则是能写进environment.yml就不要手动敲。项目根目录放一个environment.ymlname: myproj channels: - conda-forge dependencies: - python3.12 - pip - pip: - fastapi - uvicorn - openai这样环境可复现团队成员不需要猜你当时装了哪些包。4. AI编程助手落地Codex CLI的Windows落地细节与VS Code插件矩阵AI编程助手是这套环境的使用入口。Windows上最热的话题就是Codex很多人卡在“安装未完成”或者“装完不能运行”上。这节我把安装路径、认证和使用体验拆开讲清楚。4.1 Codex CLI的安装路径Codex是OpenAI推出的终端AI编程代理你给它一个任务它在终端里读文件、改代码、跑命令像极了一个真人在旁边干活。它是npm包所以第一步不是装Codex而是保证Node环境正确。Node安装有个大坑Microsoft Store版Node是个“包装壳”很多npm包装完会出现诡异权限问题。我建议在官网下载LTS版或者用wingetwinget install --id OpenJS.NodeJS.LTS -e装完反复确认node -v版本在18以上版本太低Codex安装会报错或者装完运行报语法错误。之后全局安装npm install -g openai/codex很多人卡在“安装未完成”大概率不是Codex本身的问题而是npm下载慢或者缓存损坏。可以先执行npm cache verify npm config get registry如果网络环境不理想把registry换到公共镜像站比如npm config set registry https://registry.npmmirror.com然后再安装。装完如果终端提示找不到codex命令大概率是npm全局目录不在PATH里。执行npm config get prefix把输出的路径加到系统PATH里。4.2 登录认证与使用体验运行codex第一次会引导登录。选择Login with OpenAI浏览器会打开授权页同意后终端自动完成认证。如果不想走OAuth也可以手动设置API Keysetx OPENAI_API_KEY 你的key设置完同样要重开终端才能生效。这里有个Windows细节如果Codex CLI装在Windows侧node和npm用的是Windows文件系统读Windows路径下的项目没问题但如果你打算让它操作WSL2里的项目文件我更推荐直接打开WSL2终端在Ubuntu里装一个Node和Codex。Linux侧的权限模型和文件事件机制更接近服务器环境AI代理跑起来更不容易中途翻车。使用层面我的经验是每次只让它做一个小任务比如“修改src/utils.py的第40行把日期格式改成YYYY-MM-DD并补充单元测试”。任务太大会让它的长期上下文能力吃紧改错文件后你反而要花更多时间回退。提示词里给明确的文件路径和验收标准效果远好于一句“帮我优化一下代码”。4.3 VS Code侧的插件组合VS Code本身不装任何AI插件也能做开发但配合AI工具链体验会舒服很多。我的插件矩阵很简单Python Pylance必装代码补全和类型检查。Jupyter本地模型调试、数据分析场景必备。Docker容器状态可视化管理避免命令行长串记忆。Remote-WSLWindows里直接编辑WSL2文件系统。Continue支持本地模型的开源AI插件接Ollama非常方便。Cline开源Agent型插件能自己读文件、跑终端命令适合和本地模型搭配使用。Continue接Ollama的配置很直接在Continue的配置里添加一个OpenAI兼容的providerbaseUrl填http://localhost:11434/v1apiKey填ollamamodel填你拉取的模型名。这样你在VS Code里选中代码按Tab就能让本地模型给出补全或修改建议。Cline也支持自定义API端点配置思路类似。Codex和这些插件的定位不同。Codex更适合把一个大需求交给它去执行本地模型插件更适合做逐行提示和局部修改。两者不冲突我实际使用中是Codex干重活Continue负责轻量辅助。4.4 “codex安装未完成”这类问题的标准排查链路我统计过社区里Codex Windows安装失败的常见原因列成表格按这个顺序排查比瞎试快得多。现象可能原因处置方式安装卡在下载npm网络慢或缓存损坏npm cache verify换镜像registry后重装装完codex找不到命令npm全局目录不在PATHnpm config get prefix手动加入PATH提示Node版本过低安装了Store版或旧版Node卸载后装官网LTS版本安装时要求编译原生模块缺少Visual Studio Build Tools装VS Build Tools勾选“使用C的桌面开发”运行时终端渲染乱码字体不支持Unicode边界框Windows Terminal里把字体换成Cascadia Mono排错的思路很固定先分清是下载问题、环境变量问题还是运行时依赖问题。Windows安装失败80%不是Codex本身的毛病而是Node生态在Windows上的历史包袱——路径、权限、编译工具链。每换一个环节就重新开终端验证一下PATH你能省下大量时间。5. 容器化中间件Docker Desktop联动WSL2一条命令拉起Redis与ElasticsearchAI项目几乎离不开中间件缓存用Redis检索用Elasticsearch向量库又是另一套。与其在每个项目里都手动装服务不如统一交给Docker。Windows上Docker Desktop和WSL2的组合是事实标准。5.1 为什么选Docker Desktop而不是直接在WSL2里装Docker很多人觉得Docker Desktop是重量级方案更倾向于在WSL2里直接装docker.io。这个思路能跑但维护成本高WSL2发行版一旦重置所有镜像和容器配置全部丢失没有GUI调试容器网络和资源占用也不直观文件共享还需要额外配置。Docker Desktop虽然吃资源但它把Windows和Linux两侧的体验缝在了一层启动快、镜像管理可视化、WSL2后端直接复用。安装命令winget install --id Docker.DockerDesktop -e装完重启打开Docker Desktop在设置里把“Use WSL 2 based engine”勾上并且把Ubuntu-24.04加入集成列表。这样你在WSL2里执行docker命令用的也是Desktop的引擎两侧操作完全统一。5.2 离线安装Docker与离线镜像的准备如果你所在环境网络受限需要在离线机器上安装Docker准备方式是这样的联网机器上下载Docker Desktop installer exe拷贝到目标机器。装完Docker Desktop后如果启动报WSL2内核错误需要单独安装WSL2内核更新包这个包在微软官方文档里有直链。中间件镜像提前拉好docker pull redis:7.2然后docker save -o redis.tar redis:7.2转移后用docker load -i redis.tar导入。离线环境最容易漏的不是Docker本身而是镜像依赖。比如redis-stack镜像里还带有redisinsight等组件体积大但离线拉取时一次全拿到。建议在联网机上先把docker compose文件写好docker compose pull拉全所有依赖镜像再整体docker save不要在目标机器上缺一个拉一个。5.3 Redis与Elasticsearch的一键编排在项目目录放一个docker-compose.ymlservices: redis: image: redis/redis-stack:7.2 container_name: ai-redis ports: - 6379:6379 - 8001:8001 command: redis-server --save 60 1 --requirepass devpass volumes: - redis_data:/data es: image: docker.elastic.co/elasticsearch/elasticsearch:8.11.3 container_name: ai-es environment: - discovery.typesingle-node - xpack.security.enabledfalse - ES_JAVA_OPTS-Xms512m -Xmx512m ports: - 9200:9200 - 9300:9300 volumes: - es_data:/usr/share/elasticsearch/data volumes: redis_data: es_data:启动docker compose up -d验证curl localhost:9200 docker exec -it ai-redis redis-cli -a devpass pingRedis用redis/redis-stack而不是普通redis镜像是因为它内置RedisJSON、RediSearch这些模块AI项目里做向量检索和JSON缓存顺手很多。Elasticsearch的ES_JAVA_OPTS一定要设默认堆内存是机器内存的一半16GB内存的笔记本跑一个ES就把自己卡死设成512MB-1GB足够本地实验。Windows侧还有一个常见坑端口被系统或者其他服务占用。启动docker compose up -d后容器一直restarting先看日志docker logs ai-redis如果日志里有bind address already in use用netstat -ano | findstr 6379找到占用进程换端口映射或者停掉占用服务。6. 本地模型当后盾Ollama部署、Open WebUI界面和OpenAI兼容接口本地大模型的价值在于隐私和成本代码片段、业务文档、日志数据不用出本机就能获得一个还算聪明的AI助手。Windows上最省心的方式是Ollama。6.1 先摸清硬件底细再选模型本地模型不是越大越好而是要看机器内存和显存。我自己的参考标准模型规模量化后体积推荐配置Windows上实际体验7B/8B约4-5GB16GB内存8GB显存能流畅对话和写代码13B/14B约8-10GB32GB内存12GB以上显存回答质量接近商用API但速度慢30B以上20GB起步建议服务器普通笔记本基本跑不动如果你的电脑是核显或无独显也不用灰心。Ollama在CPU上跑7B量化模型是可行的单次回答慢几秒但完全能用来测试代码生成和RAG流程。集成显卡能帮忙但不要抱太高期望。6.2 安装Ollama并管理模型安装winget install --id Ollama.Ollama -e装完默认会把模型放在C盘用户目录下。AI项目模型动辄几个GB我习惯先把模型目录挪走setx OLLAMA_MODELS D:\ollama\models设置后重启终端或者Ollama服务。拉取模型ollama pull qwen2.5:7b ollama pull deepseek-r1:7bollama list可以看已下载的模型。拉取时如果网络中断重新执行ollama pull会断点续传不用删了重来。不过我实际遇到模型文件损坏的情况也发生过症状是模型能pull完成但一对话就报错这时候直接ollama rm再重新pull即可。6.3 用Open WebUI提供网页聊天界面Ollama本身没有网页界面不适合日常聊天。Open WebUI是我用过最顺手的本地模型聊天前端支持多模型切换、文档上传、Markdown渲染。既然前面已经装了DockerOpen WebUI直接容器化运行docker run -d \ -p 3000:8080 \ --add-hosthost.docker.internal:host-gateway \ -v open-webui:/app/backend/data \ --name open-webui \ -e OLLAMA_BASE_URLhttp://host.docker.internal:11434 \ ghcr.io/open-webui/open-webui:main浏览器打开http://localhost:3000注册一个本地管理员账号进入设置把Ollama地址指向http://host.docker.internal:11434就能看到你拉取的所有模型。如果不想用Docker也可以直接在conda环境里pip install open-webui open-webui serve两种方式都行。企业或内网环境建议Docker方式因为数据卷管理和后续升级都干净。6.4 让其他工具通过OpenAI兼容接口调用本地模型Ollama最大的隐藏功能是它自带OpenAI兼容API。启动后在终端验证curl http://localhost:11434/v1/chat/completions \ -H Content-Type: application/json \ -d {\model\:\qwen2.5:7b\,\messages\:[{\role\:\user\,\content\:\你好\}]}只要这个接口通所有支持OpenAI API格式的工具都能接入本地模型。Python里写法也极其接近from openai import OpenAI client OpenAI( base_urlhttp://localhost:11434/v1, api_keyollama ) resp client.chat.completions.create( modelqwen2.5:7b, messages[{role: user, content: 解释一下WSL2}, {role: system, content: 用简单中文回答}] ) print(resp.choices[0].message.content)这套兼容层是我整套环境里最值得的一句话总结模型可以换接口不换。今天用Ollama跑7B模型明天换商业化API代码里只改一个base_url就够了。7. 端到端验证用Codex生成一个带缓存和历史的AI问答服务到这一步终端、运行时、容器和模型都齐了。光装工具不跑项目等于白装。我建议你做一个最小但完整的AI问答服务把整条链路串联起来。7.1 需求拆解Demo应当覆盖哪些环节很多人搭完环境只会跑一个ollama run的对话这没有证明环境可用。一个合格的验证Demo至少覆盖三层代码生成AI编程助手、模型调用本地Ollama、中间件Redis缓存和数据库历史。所以需求这样定写一个FastAPI服务提供GET /ask?questionxxx接口优先查Redis缓存命中直接返回未命中则调用本地模型qwen2.5:7b生成回答写入Redis和SQLite。7.2 生成、运行与联调的关键过程先启动依赖服务docker compose up -d ollama serveRedis已经在容器里跑起来了。然后创建conda环境conda create -y -n ai-demo python3.12 conda activate ai-demo pip install fastapi uvicorn openai redis接下来用Codex生成代码。我给了这样的提示词写一个FastAPI应用提供GET /ask接口参数为question通过OpenAI兼容接口调用本地的qwen2.5:7b模型。用Redis缓存相同问题1小时并把每次问答写入SQLite。Codex生成的代码经过我微调后核心部分长这样from fastapi import FastAPI from openai import OpenAI import redis import sqlite3 import hashlib app FastAPI() client OpenAI(base_urlhttp://localhost:11434/v1, api_keyollama) r redis.Redis(hostlocalhost, port6379, passworddevpass, decode_responsesTrue) def cache_key(question: str) - str: return hashlib.sha256(question.encode(utf-8)).hexdigest() app.get(/ask) def ask(question: str): key cache_key(question) cached r.get(key) if cached: return {source: cache, answer: cached} resp client.chat.completions.create( modelqwen2.5:7b, messages[ {role: system, content: 你是项目文档助手请用简洁中文回答。}, {role: user, content: question}, ], ) answer resp.choices[0].message.content r.set(key, answer, ex3600) with sqlite3.connect(qa_log.db) as conn: conn.execute(CREATE TABLE IF NOT EXISTS logs(q TEXT, a TEXT)) conn.execute(INSERT INTO logs VALUES (?, ?), (question, answer)) return {source: model, answer: answer}运行uvicorn main:app --reload --port 8000测试curl http://localhost:8000/ask?question什么是WSL2第一次请求会看到source: model第二次相同问题再请求会看到source: cache证明Redis缓存生效。SQLite里也有了问答记录。这个Demo走通了说明WSL2、conda、Python、Docker、Redis、Ollama、OpenAI兼容接口全部连通。7.3 从Demo到日常开发这套环境还能接住什么Demo看起来简单但它是很好的“环境体检报告”。Codex在这里承担了代码生成Ollama承担了推理Redis证明了容器层可用SQLite证明了文件系统写入正常。任何一个环节断了这个Demo都会卡住所以它也是个天然的排错工具。如果你还想再进一步把SQLite换成Elasticsearch给每个问答做向量索引就能做成一个简易的本地RAG系统。接口还是那些接口模型还是那个模型代码量增加不多但场景立刻从“问答Demo”变成“本地知识库助手”。这就是我反复强调“接口兼容”的意义——扩展都在主干上生枝不用推倒重来。8. 我在Windows AI环境中踩过的坑排查链路节选这一节不是完整手册而是我踩过频率最高的坑和一套我自己总结的排错框架。遇到问题先别整机重装按这个思路走。8.1 高频问题对照表现象根因处置codex命令找不到npm全局路径不在PATHnpm config get prefix并加到PATHPowerShel执行脚本被阻止ExecutionPolicy限制管理员执行Set-ExecutionPolicy RemoteSignedDocker Desktop一直Starting虚拟化未开启或WSL2异常任务管理器确认虚拟化执行wsl --shutdown后重启Docker容器端口冲突系统服务或其他进程占用netstat -ano查端口PID杀进程或改映射conda建环境卡在Solving解析器太慢装conda-libmamba-solver并设置solverlibmambaES启动后内存占用过高默认堆内存过大设置ES_JAVA_OPTS-Xms512m -Xmx512mPython输出中文乱码默认编码非UTF-8设置环境变量PYTHONUTF81WSL2磁盘占用暴涨发行版默认在C盘提前迁移到D盘或定期wsl --shutdown8.2 分层排查方法论这四个词是我排错的原则分层、最小、完整、日志。“分层”指的是把系统、WSL2、运行时、容器、模型、编码工具拆开逐层确认。比如VS Code连不上本地模型不要先怀疑VS Code先curl一下Ollama的API如果通问题在VS Code侧插件配置不通问题在模型层或网络层。“最小”指的是写一个最小复现脚本。比如怀疑Redis连接有问题就在Python里执行5行代码只做r.ping()不要带着整个项目去猜。AI项目里依赖关系复杂最小脚本能快速确定边界。“完整”指的是看日志要看完整输出而不是只看报错最后一行。Docker容器用docker logs container_namenpm安装用npm install --verboseconda解析用conda create -vv。Windows下很多错误信息会在前面几十行里隐藏真正的根因最后一行往往是症状不是原因。“日志”指的是Windows事件查看器。当Docker Desktop、WSL服务在终端里看不出问题时打开事件查看器 - Windows日志 - 系统过滤来源为Docker、LxssManager相关事件往往能看到服务启动失败的具体原因。这个信息源很容易被Windows开发者忽略但它比任何命令行输出都诚实。8.3 两个容易被忽视的Windows开发习惯第一代码目录不要放在OneDrive同步文件夹里也不要用带中文和空格的深层路径。我遇到过因为OneDrive文件锁导致npm install失败也遇到过路径过深导致MSVC编译器找不到文件。D:\dev\projects这种短平快结构是最稳的。第二Windows的实时扫描对node_modules这类海量小文件是灾难。如果你发现npm install、conda install特别慢把项目目录加入Windows安全中心的排除列表速度能提升一大截。这个操作用管理员身份在“病毒和威胁防护 - 排除项”里添加即可。最后说说我自己的排错心态。遇到Windows AI环境问题先不要动“重装系统”的念头大多问题出在环境变量、路径和依赖顺序上。把每一层的版本输出保存下来打印PATH写最小复现再看完整日志这套顺序我用了很久90%的问题都能在十分钟内定位。环境稳了剩下的时间才能花在写代码本身。
RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进