同開發(fā):從安裝到排錯(cuò)完整指南)
配置WSL并在VSCode里打開這件事我前前后后折騰了不下二十次——幫同事配、自己重裝系統(tǒng)后配、在不同機(jī)器上配踩過的坑基本都齊了。今天這篇就把完整流程和常見問題一起說透從零開始按步驟照做就能跑通。先說清楚這套組合能解決什么問題你在Windows上寫代碼但有些工具、腳本、依賴只能在Linux環(huán)境里跑比如PyTorch的CUDA加速、CTF里的binwalk、各種只發(fā)Linux版的開發(fā)工具。以前要么裝雙系統(tǒng)來回重啟要么開虛擬機(jī)吃內(nèi)存?,F(xiàn)在裝一個(gè)WSLWindows和Linux的切換成本幾乎為零再把VSCode插進(jìn)去編輯器的體驗(yàn)還在Windows側(cè)跑代碼的環(huán)境在Linux側(cè)文件互通、端口互通這才是真正舒服的開發(fā)狀態(tài)。這套方案適合誰想學(xué)Linux但不敢直接換系統(tǒng)的學(xué)生、需要在Windows上寫C/C/Python的開發(fā)者、跑深度學(xué)習(xí)模型的研究生、偶爾用Linux工具的運(yùn)維基本都可以直接照這個(gè)流程走。下面從原理講到實(shí)操把每一步為什么這么做也講清楚。1. WSL到底是什么為什么非裝不可1.1 WSL 1和WSL 2一字之差天壤之別WSL全稱是Windows Subsystem for Linux微軟官方出的Linux兼容層?,F(xiàn)在默認(rèn)安裝的都是WSL 2跟WSL 1有本質(zhì)區(qū)別。WSL 1用的是系統(tǒng)調(diào)用翻譯層把Linux程序發(fā)出來的系統(tǒng)調(diào)用“翻譯”成Windows能理解的操作好處是文件訪問速度特別快壞處是兼容性不完整有些程序會莫名其妙崩。WSL 2則是在Hyper-V虛擬化平臺上跑了一個(gè)完整的輕量級Linux虛擬機(jī)內(nèi)核是真正的Linux內(nèi)核兼容性幾乎百分之百但那句“虛擬機(jī)”讓很多人誤會——它跟傳統(tǒng)虛擬機(jī)完全不是一個(gè)體驗(yàn)。傳統(tǒng)虛擬機(jī)比如VMware要分配固定內(nèi)存、要裝桌面、要等待啟動(dòng)開機(jī)以分鐘計(jì)。WSL 2的啟動(dòng)速度跟開個(gè)應(yīng)用差不多內(nèi)存按需分配用多少占多少而且因?yàn)樯疃燃稍赪indows里你根本感覺不到“虛擬機(jī)”的存在。我更直白的理解是這樣的WSL 2就像在Windows里內(nèi)置了一個(gè)專業(yè)的Linux環(huán)境它不給你桌面界面也沒必要就是一個(gè)純粹的終端世界專門給開發(fā)者用。1.2 VS Code Remote-WSL的“遠(yuǎn)程”是偽遠(yuǎn)程VSCode里有個(gè)Remote Development系列插件Remote-SSH是真遠(yuǎn)程連接服務(wù)器Remote-WSL則是連接本機(jī)的WSL環(huán)境。很多人第一次用Remote-WSL會覺得神奇明明WSL就在自己電腦里為什么要叫“遠(yuǎn)程”因?yàn)閂S Code的架構(gòu)是這樣Windows側(cè)跑的是編輯器界面客戶端實(shí)際的編譯、調(diào)試、終端、語言服務(wù)都在WSL里運(yùn)行。VS Code會在WSL里自動(dòng)安裝一個(gè)vscode-server后臺服務(wù)負(fù)責(zé)執(zhí)行語言服務(wù)器、運(yùn)行調(diào)試器、啟動(dòng)終端進(jìn)程。你在Windows里看到的編輯器本質(zhì)上是Linux側(cè)服務(wù)推過來的畫面。這個(gè)設(shè)計(jì)的聰明之處在于工具鏈的環(huán)境一致性。比如你配C/C環(huán)境時(shí)Windows側(cè)裝MinGWWSL側(cè)裝GCCRemote-WSL會讓兩邊完全隔離項(xiàng)目在WSL里打開時(shí)用的是Linux的GCC在Windows里打開時(shí)用的是Windows的編譯器互不干擾也不會出現(xiàn)“我明明配好了怎么還報(bào)錯(cuò)”的混亂。1.3 這套組合真正解決的使用場景我列幾個(gè)最典型的場景你看看自己有沒有中槍Python/PyTorch環(huán)境Windows下配PyTorch的CUDA環(huán)境經(jīng)常把人折騰瘋各種路徑、版本、驅(qū)動(dòng)沖突。WSL里直接走Linux的安裝邏輯反而干凈清爽。很多科研環(huán)境默認(rèn)就是Linux你在WSL里跑深度學(xué)習(xí)代碼跟在服務(wù)器上跑幾乎沒區(qū)別。C/C開發(fā)Linux的GCC工具鏈比Windows下的配置要順暢配合VS Code的C/C插件代碼提示、調(diào)試、斷點(diǎn)都齊全。CTF和安全工具很多工具比如binwalk、burp一些腳本、各種只發(fā)Linux版的算法工具在WSL里一條命令裝好直接用。本地化部署AI工具像Claude Code、Codex這類AI編程工具有不少人在WSL里跑得更穩(wěn)因?yàn)閃indows的命令行環(huán)境和權(quán)限管理對于這些工具來說兼容性不如Linux。還有個(gè)隱藏優(yōu)點(diǎn)公司跳板機(jī)、服務(wù)器運(yùn)維場景。你在WSL里配好SSH密鑰然后VSCode用Remote-SSH連服務(wù)器密鑰路徑、終端環(huán)境都跟Linux保持一致比Windows下用putty之類方便太多。2. 從零開始安裝WSL的完整流程2.1 安裝前提檢查Windows版本與CPU虛擬化動(dòng)手之前先花兩分鐘檢查環(huán)境避免裝到一半才發(fā)現(xiàn)基礎(chǔ)條件不滿足。Windows版本要求Windows 10 2004build 19041或更高Windows 11直接支持。如果你的系統(tǒng)低于這個(gè)版本先升級Windows再談WSL。還有個(gè)細(xì)節(jié)Windows Server 2022也能裝但要手動(dòng)啟用VirtualMachinePlatform功能網(wǎng)上常搜到的“Windows Server 2022 WSL needs updating”就是環(huán)境判定問題后面單講。打開命令行檢查的方法按WinR輸入winver查看版本號。第二件事是確認(rèn)CPU虛擬化已經(jīng)在BIOS里開啟任務(wù)管理器 → 性能 → CPU看“虛擬化”那一欄是不是“已啟用”。如果顯示“已禁用”重啟進(jìn)BIOS在Intel Virtualization TechnologyVT-x或AMD SVM選項(xiàng)里打開。這一步不做后面裝WSL 2會報(bào)錯(cuò)。然后打開“控制面板 → 程序 → 啟用或關(guān)閉Windows功能”確?!斑m用于Linux的Windows子系統(tǒng)”和“虛擬機(jī)平臺”兩個(gè)選項(xiàng)都是勾選狀態(tài)。實(shí)際上新版Windows執(zhí)行wsl --install會自動(dòng)啟用但老系統(tǒng)或者關(guān)閉過功能的需要手動(dòng)確認(rèn)。2.2 wsl --install一鍵安裝與指定發(fā)行版如果你的系統(tǒng)滿足條件安裝WSL這件事在最新的Windows上已經(jīng)被簡化到一條命令wsl --install這條命令會做四件事啟用WSL功能、啟用虛擬機(jī)平臺、下載安裝最新的WSL內(nèi)核、默認(rèn)安裝Ubuntu發(fā)行版。整個(gè)過程會自動(dòng)重啟一次Windows重啟后彈出一個(gè)Ubuntu窗口讓你設(shè)置用戶名和密碼。不過我們通常不會直接用默認(rèn)命令而是指定發(fā)行版。我習(xí)慣用Ubuntu 22.04 LTS穩(wěn)定而且教程多wsl --install -d Ubuntu-22.04如果不知道有哪些可選的發(fā)行版先運(yùn)行wsl --list --online看到列表后選擇。還有一個(gè)選項(xiàng)需要注意安裝時(shí)可以用-n跳過發(fā)行版安裝只裝WSL本體發(fā)行版后面自己挑。裝完以后設(shè)置默認(rèn)的WSL版本為2wsl --set-default-version 2這一步很關(guān)鍵。如果默認(rèn)還是1很多新特性用不了。查看當(dāng)前所有發(fā)行版的WSL版本wsl --list --verbose輸出里VERSION那一列顯示2就對了。如果你的發(fā)行版當(dāng)前是1可以單獨(dú)切換wsl --set-version Ubuntu-22.04 22.3 把WSL裝到D盤導(dǎo)出導(dǎo)入法C盤空間緊張的人經(jīng)常問“怎么把WSL裝到D盤”。這里有個(gè)關(guān)鍵認(rèn)知wsl --install裝完的發(fā)行版默認(rèn)就在C盤并且安裝階段沒法選盤。解決方案是裝完再遷移。思路是把現(xiàn)有發(fā)行版導(dǎo)出成一個(gè)tar文件注銷掉原發(fā)行版再導(dǎo)入到D盤。操作如下# 確保WSL里的發(fā)行版是停止?fàn)顟B(tài) wsl --shutdown # 導(dǎo)出到D盤文件比較大20G以上的系統(tǒng)大概會導(dǎo)出十幾個(gè)G wsl --export Ubuntu-22.04 D:\wsl-ubuntu-backup.tar # 注銷原發(fā)行版注意導(dǎo)出成功后再執(zhí)行 wsl --unregister Ubuntu-22.04 # 導(dǎo)入到D盤目標(biāo)目錄 wsl --import Ubuntu-22.04 D:\WSL\Ubuntu-22.04 D:\wsl-ubuntu-backup.tar --version 2導(dǎo)入完成后默認(rèn)會以root用戶登錄這時(shí)候還需要設(shè)置默認(rèn)用戶。在Windows側(cè)執(zhí)行wsl -d Ubuntu-22.04 -u root進(jìn)入后創(chuàng)建用戶配置文件假設(shè)你的用戶名是dev# 創(chuàng)建用戶 useradd -m -s /bin/bash dev # 設(shè)置密碼 passwd dev # 把用戶名寫入默認(rèn)用戶配置 echo [user] /etc/wsl.conf echo defaultdev /etc/wsl.conf改完以后wsl --shutdown再重新進(jìn)就會切回dev用戶了。整個(gè)過程其實(shí)不復(fù)雜唯一要注意的就是導(dǎo)出前把發(fā)行版停干凈否則導(dǎo)出的系統(tǒng)文件可能不一致。另外導(dǎo)入之后的發(fā)行版在wsl --list里顯示名字還是Ubuntu-22.04但網(wǎng)絡(luò)的初始配置比如DNS可能變了遇到網(wǎng)絡(luò)問題先看wsl.conf。2.4 第一次登錄Ubuntu之后要做的三件事裝完WSL里的Ubuntu后先別急著在VSCode里打開把這三件事做完再進(jìn)后面會少很多坑。第一件事?lián)Q軟件源。Ubuntu默認(rèn)源在國外apt下載慢到你懷疑人生。換成國內(nèi)鏡像源具體操作是編輯/etc/apt/sources.listUbuntu 24.04以后是/etc/apt/sources.list.d/ubuntu.sources把a(bǔ)rchive.ubuntu.com和security.ubuntu.com替換成國內(nèi)鏡像的域名。換完以后先sudo apt update驗(yàn)證。第二件事更新系統(tǒng)軟件包。執(zhí)行sudo apt update sudo apt upgrade -y把基礎(chǔ)包全部升到最新。很多人在VSCode里報(bào)錯(cuò)“缺少依賴”多半是新裝的系統(tǒng)太舊導(dǎo)致的。第三件事安裝基礎(chǔ)開發(fā)工具。按自己的需求裝sudo apt install -y build-essential git curl wget python3 python3-pipbuild-essential里包含GCC、G、make這些C/C開發(fā)必需的工具鏈先裝上肯定不虧。3. 安裝慢、報(bào)錯(cuò)、起不來排錯(cuò)實(shí)錄3.1 wsl --install卡住不動(dòng)網(wǎng)速慢被重置網(wǎng)上搜“wsl install太慢了怎么解決”“wsl --install網(wǎng)速慢被重置”的人特別多。這個(gè)問題的根源是發(fā)行版文件要從微軟的服務(wù)器下載部分地區(qū)下載速度不穩(wěn)定進(jìn)度條在0%或者某個(gè)百分比卡很久。我的建議是先給它一點(diǎn)耐心觀察5分鐘。如果確實(shí)不動(dòng)按CtrlC取消然后檢查網(wǎng)絡(luò)。確認(rèn)網(wǎng)絡(luò)沒問題后換一種安裝方式直接從微軟的發(fā)行版下載頁面手動(dòng)下載Ubuntu的appx包然后用命令安裝。下載頁面的地址我記得是https://learn.microsoft.com/zh-cn/windows/wsl/install-manual進(jìn)去以后找到Ubuntu 22.04的鏈接會得到一個(gè)幾百M(fèi)B的.appx文件后綴也可能是.appxbundle。下載完成后在文件所在目錄執(zhí)行Add-AppxPackage .\Ubuntu.appx裝完以后從開始菜單打開Ubuntu設(shè)置用戶名密碼再用命令把它注冊到WSL管理里# 查看本地有哪些安裝包 wsl --list --online # 把本地安裝的Ubuntu注冊進(jìn)來 wsl --install -d Ubuntu這個(gè)方法的本質(zhì)是繞過wsl --install的下載環(huán)節(jié)直接喂給系統(tǒng)本地文件。文件下載速度取決于你當(dāng)前的網(wǎng)絡(luò)到微軟服務(wù)器的帶寬比wsl --install那個(gè)不穩(wěn)定流程要可控得多。3.2 錯(cuò)誤代碼WSL/installdistro/service/registerdistro/createvm/hcs/error_file_v這個(gè)報(bào)錯(cuò)是搜索熱詞里出現(xiàn)頻率極高的一類問題通常長這樣WSL/installdistro/service/registerdistro/createvm/hcs/error_file_v拆開看錯(cuò)誤鏈路的含義是WSL在注冊發(fā)行版服務(wù)時(shí)嘗試創(chuàng)建虛擬機(jī)但HCSHost Compute Service宿主計(jì)算服務(wù)返回了file_v類型的錯(cuò)誤。說人話就是虛擬化相關(guān)服務(wù)沒正常工作。排查思路按以下順序來打開服務(wù)列表按WinR輸入services.msc找到Hyper-V Host Compute Service確認(rèn)狀態(tài)是“正在運(yùn)行”。如果沒運(yùn)行右鍵啟動(dòng)并設(shè)置為“自動(dòng)”。很多時(shí)候這個(gè)服務(wù)被安全軟件或手動(dòng)優(yōu)化工具禁用了。確認(rèn)Windows功能齊全Get-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux和VirtualMachinePlatform這兩個(gè)功能的State都要是Enabled。執(zhí)行bcdedit檢查Hypervisor是否啟動(dòng)bcdedit /set hypervisorlaunchtype auto這一步需要管理員權(quán)限的命令行執(zhí)行完重啟。如果之前是“關(guān)閉”或“off”改完重啟就好了。這個(gè)命令本質(zhì)上是在告訴Windows啟動(dòng)引導(dǎo)器要加載微軟的Hypervisor。最后的大招是卸了重裝。管理員命令行執(zhí)行wsl --unregister Ubuntu-22.04 wsl --shutdown然后重新wsl --install -d Ubuntu-22.04。實(shí)測下來80%的error_file_v問題是HCS服務(wù)沒啟動(dòng)或者h(yuǎn)ypervisorlaunchtype被改過先查這兩個(gè)基本能解決。3.3 “wsl needs updating”和Windows Server 2022的坑啟動(dòng)WSL時(shí)終端提示“wsl needs updating your version of Windows Subsystem for Linux (wsl) is too...”很多人不知道什么意思。它的含義是你的系統(tǒng)里WSL組件版本太舊而發(fā)行版要求更新版本。注意這里的WSL組件指的不再是“Windows功能”里的舊版WSL而是新版WSL即WSL 2內(nèi)核及管理組件。很多人以為打開Windows功能里的“適用于Linux的Windows子系統(tǒng)”就完事了但是新版WSL默認(rèn)走的是Microsoft Store更新如果你的系統(tǒng)沒有自動(dòng)更新那部分就會提示needs updating。解決辦法是手動(dòng)更新打開Microsoft Store搜索“Windows Subsystem for Linux”點(diǎn)擊“獲取/更新”完成后再打開終端試。或者直接用管理員命令wsl --updatewsl --update會強(qiáng)制拉取最新版WSL組件。如果命令報(bào)錯(cuò)或者網(wǎng)速慢去Microsoft Store的“庫 → 獲取更新”里更新。Windows Server 2022用戶的報(bào)錯(cuò)“wsl needs updating”多了一層原因Server系統(tǒng)默認(rèn)沒有安裝“虛擬機(jī)平臺”功能新版WSL依賴它。所以Windows Server 2022用戶在裝WSL前需要先把VirtualMachinePlatform功能打開否則無論怎么update都會給你彈“needs updating”。命令行管理員身份執(zhí)行dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart重啟后再wsl --update。3.4 檢測到localhost代理配置但未鏡像到WSL現(xiàn)在很多人的Windows上都會配本地代理于是經(jīng)常在WSL里看到這樣的警告wsl: 檢測到 localhost 代理配置但未鏡像到 WSL。NAT 模式下的 WSL 不支持 localhost 代理。這個(gè)提示的意思是Windows的HTTP代理設(shè)置比如127.0.0.1:7890沒有同步到WSL里而WSL 2默認(rèn)的NAT網(wǎng)絡(luò)模式下Windows和WSL的localhost并不互通你如果在WSL里跑curl之類要出網(wǎng)的工具可能會連不上。為什么不建議一上來就改配置繞過這個(gè)問題因?yàn)閃SL 2提供了一種更徹底的方式鏡像網(wǎng)絡(luò)模式。在C:\Users\你的用戶名\.wslconfig文件里加一段[wsl2] networkingModemirrored保存后執(zhí)行wsl --shutdown再重進(jìn)WSL的網(wǎng)絡(luò)就和Windows共享localhost互通代理設(shè)置也會自動(dòng)鏡像。這個(gè)模式在Windows 11 22H2及以上版本里支持得比較好老版本系統(tǒng)可能需要升級。如果堅(jiān)持用NAT模式可以手動(dòng)在WSL里設(shè)置代理環(huán)境變量export http_proxyhttp://Windows的IP:代理端口 export https_proxyhttp://Windows的IP:代理端口Windows的IP怎么查在WSL里執(zhí)行cat /etc/resolv.conf看nameserver那一行的IP或者用ip route show | grep default。不過每次啟動(dòng)都要重新設(shè)置不如鏡像模式一勞永逸。3.5 組件存儲已損壞、錯(cuò)誤HCS和絕望時(shí)的重置方法運(yùn)行wsl --install時(shí)報(bào)“安裝組件存儲已損壞”“無法解析此名稱”之類的錯(cuò)誤一般跟Windows系統(tǒng)本身的組件服務(wù)CBS有關(guān)。常見觸發(fā)場景是系統(tǒng)被精簡過、跑過各種“優(yōu)化”工具、或者升級途中中斷過。處理方案有幾個(gè)層次第一層用系統(tǒng)文件檢查器掃一遍。管理員命令行sfc /scannow第二層如果sfc提示修復(fù)不了的錯(cuò)誤再跑DISMdism.exe /online /cleanup-image /restorehealth這個(gè)命令會從Windows更新源拉取健康文件替換損壞組件。第三層執(zhí)行完以上兩步重啟再嘗試wsl --install。如果還是不行檢查一下C盤空間。WSL 2默認(rèn)的vhdx虛擬磁盤文件在C盤組件存儲損壞也可能是磁盤寫入失敗。清理出足夠的空間至少10GB再試。最后實(shí)在不行就去“設(shè)置 → 應(yīng)用 → 已安裝的應(yīng)用”里卸載所有WSL相關(guān)條目包括Windows Subsystem for Linux、Windows Subsystem for Linux Update兩個(gè)應(yīng)用重啟后再重新wsl --install。這個(gè)操作相當(dāng)于把你電腦里的WSL完全清除重來成功率非常高。4. 在VS Code里打開WSLRemote-WSL實(shí)戰(zhàn)4.1 安裝VS Code和Remote-WSL插件VS Code的安裝本身沒什么難度唯一的坑是下載入口。網(wǎng)上搜“vscode下載”“vscode官網(wǎng)下載入口”會看到很多第三方站我建議直接去code.visualstudio.com認(rèn)準(zhǔn)域名就行。選擇Windows x64的User Installer版本即可裝的時(shí)候注意把“添加到PATH”這個(gè)選項(xiàng)勾上后面從WSL終端敲code .能不能打開就靠這個(gè)。裝好VS Code以后打開擴(kuò)展面板搜索“Remote - WSL”安裝微軟官方出的那個(gè)Remote Development插件組合。microsoft.vscode-remote-remotecontainers那個(gè)包現(xiàn)在叫“Remote Development”包含Remote-WSL、Remote-SSH、Dev Containers三個(gè)擴(kuò)展一次裝齊最省事。裝好以后VS Code左下角會出現(xiàn)一個(gè)綠色的“”圖標(biāo)這個(gè)圖標(biāo)就是遠(yuǎn)程連接狀態(tài)的入口。點(diǎn)擊它能管理遠(yuǎn)程環(huán)境。4.2 六種打開WSL的方法總有一種適合你實(shí)際操作中我試過下面這幾種方式按效率排序方式一最推薦在VS Code里按F1或者CtrlShiftP打開命令面板輸入“WSL: Connect to WSL”回車選擇你的發(fā)行版VS Code會自動(dòng)重開一個(gè)窗口連接進(jìn)來。方式二VS Code左下角點(diǎn)綠色“”圖標(biāo)選擇“Connect to WSL”再選發(fā)行版。方式三打開終端Windows Terminal或CMD進(jìn)入WSLwsl然后在Ubuntu里輸入code .如果你在VS Code里裝過Remote-WSL這個(gè)命令會在WSL環(huán)境下啟動(dòng)VS Code并連接進(jìn)去。方式四在Windows的文件資源管理器里進(jìn)入\\wsl$\Ubuntu-22.04路徑右鍵你的項(xiàng)目文件夾選擇“在Visual Studio Code中打開”需要已經(jīng)配置過默認(rèn)應(yīng)用。方式五直接用wsl -d Ubuntu-22.04進(jìn)入終端然后輸入code /home/dev/項(xiàng)目路徑。方式六啟動(dòng)VS Code后用Remote Explorer側(cè)邊欄找到WSL目標(biāo)點(diǎn)“”新建窗口。經(jīng)常有人問“為什么我在WSL里敲code .提示找不到命令”。這個(gè)問題的根源在于VS Code安裝時(shí)沒勾“添加到PATH”或者沒裝Remote-WSL插件時(shí)WSL里就不會有code這個(gè)命令。重新打開VS Code的安裝包修復(fù)安裝勾選“添加到PATH”或者確認(rèn)Remote-WSL已安裝即可。4.3 首次連接的vscode-server下載問題第一次用Remote-WSL連接時(shí)VS Code會在WSL里自動(dòng)下載并解壓一個(gè)vscode-server這一步如果網(wǎng)絡(luò)不好可能卡在“正在下載”很長時(shí)間。現(xiàn)象是在底部狀態(tài)欄看到“Downloading VS Code Server ...”然后進(jìn)度條可能不動(dòng)。幾種解決辦法等。第一次下載通常幾十MB慢的時(shí)候確實(shí)要幾分鐘。如果時(shí)間超過10分鐘還在“下載”考慮網(wǎng)絡(luò)問題。手動(dòng)輔助下載。在Windows側(cè)去GitHub上的microsoft/vscode倉庫找一個(gè)叫“vscode-server-linux-x64.tar.gz”的壓縮包注意版本號要和本地VS Code版本一致。然后在WSL里手動(dòng)解壓到~/.vscode-server/bin/commit-id/目錄。獲取commit-id的方法在VS Code的“幫助 → 關(guān)于”里看到一串類似e5a624b788d92b8d0dcf2f9e0353f845083e8f39的哈希這個(gè)就是commit-id。實(shí)際操作步驟cd ~ mkdir -p ~/.vscode-server/bin/commit-id tar -xzf /mnt/d/vscode-server-linux-x64.tar.gz -C ~/.vscode-server/bin/commit-id --strip-components1解壓完成后重啟VS Code重新連接WSL就會跳過下載步驟直接啟動(dòng)。先連一次讓VS Code自己掛起然后切到命令行手動(dòng)執(zhí)行下載腳本wget -O vscode-server.tar.gz https://update.code.visualstudio.com/commit:你的commit-id/server-linux-x64/stable我個(gè)人用過方案二成功率最高就是麻煩一點(diǎn)。如果你常在這類網(wǎng)絡(luò)環(huán)境工作建議把解壓好的vscode-server目錄備份到D盤下次換機(jī)器直接拷過去。4.4 配置中文、Python、C/C和環(huán)境變量連接進(jìn)WSL以后的第一件事如果你習(xí)慣中文界面裝中文語言包擴(kuò)展面板搜索“Chinese (Simplified)”安裝后右下角會提示切換語言重啟VS Code生效。然后是具體語言環(huán)境。以Python為例WSL里安裝的Python和Windows側(cè)是兩個(gè)完全獨(dú)立的體系要在左下角確認(rèn)Python解釋器。CtrlShiftP輸入“Python: Select Interpreter”選擇/usr/bin/python3或conda環(huán)境路徑。這里有個(gè)高頻坑Window側(cè)裝了PythonVSCode自動(dòng)選擇了Windows解釋器運(yùn)行的時(shí)候其實(shí)是Windows環(huán)境而不是WSL環(huán)境結(jié)果編譯出來的路徑、依賴全亂。確保左下角顯示的是“WSL: Ubuntu-22.04”開頭就對了。C/C的配置安裝C/C擴(kuò)展ms-vscode.cpptools在項(xiàng)目里按F5選擇“C (GDB/LLDB)”VS Code會自動(dòng)生成launch.json和tasks.json。tasks.json里的編譯參數(shù)我一般直接寫成{ version: 2.0.0, tasks: [ { label: C/C: g build active file, type: cppbuild, command: /usr/bin/g, args: [ -fdiagnostics-coloralways, -g, ${file}, -o, ${fileDirname}/${fileBasenameNoExtension} ], options: { cwd: ${fileDirname} }, group: { kind: build, isDefault: true } } ] }這樣按CtrlShiftB編譯按F5調(diào)試斷點(diǎn)、變量監(jiān)視、調(diào)用棧都正常。很多人反饋“vscode寫C沒有代碼提示”。大概率原因是沒裝C/C擴(kuò)展或者沒在WSL側(cè)安裝GCC套件。代碼提示依賴IntelliSense配置在項(xiàng)目根目錄放一個(gè).vscode/c_cpp_properties.json明確指定編譯器路徑和標(biāo)準(zhǔn){ configurations: [ { name: WSL, includePath: [ ${workspaceFolder}/**, /usr/include/** ], defines: [], compilerPath: /usr/bin/gcc, cStandard: c17, cppStandard: c17, intelliSenseMode: linux-gcc-x64 } ], version: 4 }如果還沒有提示檢查有沒有在WSL里裝完整工具鏈sudo apt install build-essential。4.5 端口轉(zhuǎn)發(fā)WSL里跑服務(wù)Windows如何訪問WSL 2默認(rèn)用了NAT網(wǎng)絡(luò)WSL里啟動(dòng)的服務(wù)比如python manage.py runserver 8000或者Vite開發(fā)服務(wù)器默認(rèn)可以通過localhost從Windows側(cè)直接訪問這是微軟做好的一個(gè)透明轉(zhuǎn)發(fā)機(jī)制。前提是服務(wù)監(jiān)聽的是WSL的某個(gè)端口VS Code的Remote-WSL會自動(dòng)做端口轉(zhuǎn)發(fā)你在Windows瀏覽器里輸入http://localhost:8000就能打開。這里有個(gè)反直覺的地方WSL里其實(shí)有兩個(gè)IP一個(gè)是WSL自己的NAT內(nèi)網(wǎng)IP一個(gè)是Windows側(cè)的。你幫別人部署時(shí)別人訪問你的Windows IP是連不進(jìn)來的因?yàn)閃SL是NAT隔離的外部訪問要通過Windows側(cè)轉(zhuǎn)發(fā)。好在VS Code已經(jīng)幫你處理了localhost的轉(zhuǎn)發(fā)日常開發(fā)夠用。如果你在WSL里跑的服務(wù)需要綁定到其它端口、或者連接不上去排查順序服務(wù)是否真的在監(jiān)聽netstat -tlnp查看。WSL鏡像網(wǎng)絡(luò)模式有沒有開啟前面說的networkingModemirrored開了就不存在轉(zhuǎn)發(fā)問題。防火墻有沒有攔截Windows Defender防火墻默認(rèn)對WSL的流量是放行的但如果你裝過第三方防火墻需要手動(dòng)加規(guī)則。5. 深度實(shí)踐WSL里搭建Python/PyTorch與GPU加速5.1 Python環(huán)境選擇直接用系統(tǒng)Python還是要裝MinicondaWSL自帶的Ubuntu系統(tǒng)Python 3是有的但做深度學(xué)習(xí)或者多項(xiàng)目開發(fā)我建議裝Miniconda。原因很簡單conda讓你把不同項(xiàng)目的依賴隔離還能直接管理CUDA相關(guān)的包科研領(lǐng)域普遍默認(rèn)用它。安裝步驟# 切換到你的用戶目錄 cd ~ # 下載Miniconda安裝腳本 wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh # 執(zhí)行安裝 bash Miniconda3-latest-Linux-x86_64.sh安裝過程中一路yes注意最后一步提示是否把conda初始化到shell選yes。裝完重新打開終端應(yīng)該能看到(base)前綴。創(chuàng)建項(xiàng)目環(huán)境并激活conda create -n ai python3.10 -y conda activate ai5.2 CUDA和PyTorch的GPU支持驗(yàn)證很多人以為WSL里不能用GPU這是誤解。WSL 2原生支持GPU加速前提是Windows側(cè)裝好了最新的NVIDIA顯卡驅(qū)動(dòng)在Windows里裝的驅(qū)動(dòng)可以透傳給WSLWSL里不需要再裝一遍驅(qū)動(dòng)。驗(yàn)證方法在WSL里執(zhí)行nvidia-smi如果輸出GPU列表說明CUDA可用。然后安裝PyTorchconda install pytorch torchvision pytorch-cuda11.8 -c pytorch -c nvidia安裝完驗(yàn)證python -c import torch; print(torch.cuda.is_available(), torch.cuda.get_device_name(0))輸出True和你的顯卡名稱就成功了。用AMD顯卡比如7900XTX的人要注意PyTorch在WSL下對AMD GPU的支持走ROCm路線安裝方式和NVIDIA不完全一樣網(wǎng)上搜“7900xtx pytorch wsl”有專門的教程核心要點(diǎn)是Windows驅(qū)動(dòng)要裝最新版ROCm版本要和PyTorch匹配。穩(wěn)定性相比NVIDIA差一些做研究可能沒問題跑長時(shí)間訓(xùn)練還是建議N卡或云GPU。5.3 踩過的一個(gè)坑命令行能跑VS Code里import失敗有段時(shí)間我在WSL里跑PyTorch一切正常但在VSCode里運(yùn)行卻提示ModuleNotFoundError: No module named torch。排查后發(fā)現(xiàn)原因很蠢VSCode選擇了解釋器的時(shí)候選到了系統(tǒng)的/usr/bin/python3而不是conda環(huán)境里的Python。VS Code的Python擴(kuò)展默認(rèn)會掃描WSL里的所有解釋器但有時(shí)候它緩存了舊的列表。解決辦法在VS Code里CtrlShiftP輸入“Python: Clear Cache and Reload Window”再重新“Python: Select Interpreter”。選完后在終端里看VS Code啟動(dòng)的終端應(yīng)該帶著(ai)前綴。一句話總結(jié)VSCode里跑Python百分之八十的依賴問題都出在解釋器選錯(cuò)。順便說一句用Claude Code這類本地化AI編程工具時(shí)同樣會遇到解釋器環(huán)境問題。我在WSL里跑Claude Code時(shí)工具會自己管理Node.js和Python環(huán)境反而比Windows下干凈。如果你專門為了這類工具去折騰WSL先確認(rèn)Node.js版本node -v不到18的版本先升級。6. 高頻問題速查表與冷門技巧6.1 速查表我?guī)湍惆殉R妶?bào)錯(cuò)都整理好了這里把我遇到過、以及網(wǎng)上高頻出現(xiàn)的報(bào)錯(cuò)整理成一張速查表建議收藏備用癥狀原因處理方式wsl: 檢測到 localhost 代理配置但未鏡像到 WSLNAT網(wǎng)絡(luò)模式不會同步代理設(shè)置在.wslconfig里設(shè)置networkingModemirrored重啟WSLWSL/installdistro/service/registerdistro/createvm/hcs/error_file_vHCS服務(wù)未啟動(dòng)或虛擬化被關(guān)閉啟動(dòng)Hyper-V Host Compute Servicebcdedit開hypervisorlaunchtypewsl needs updatingWSL組件版本太舊執(zhí)行wsl --update或在Microsoft Store更新WSL安裝/下載卡住網(wǎng)絡(luò)到微軟服務(wù)器不穩(wěn)定手動(dòng)下載appx包本地安裝或用wsl --export/--import遷移code: command not foundVS Code沒添加PATH或沒裝Remote擴(kuò)展修復(fù)安裝勾選“添加到PATH”裝Remote-WSLVSCode里import失敗解釋器選錯(cuò)重新選擇WSL里的conda解釋器清理緩存WSL里curl/apt超時(shí)DNS或代理問題檢查/etc/resolv.conf或開啟鏡像網(wǎng)絡(luò)磁盤空間被WSL占滿vhdx文件只增不減用wsl --shutdown后執(zhí)行Optimize-VHD或diskpart壓縮找不到操作系統(tǒng)項(xiàng)或藍(lán)屏回退Hyper-V內(nèi)核未加載執(zhí)行bcdedit /set hypervisorlaunchtype auto6.2 幾個(gè)實(shí)戰(zhàn)頻率很高的冷門技巧忘記WSL密碼wsl -d Ubuntu-22.04 -u root以root進(jìn)系統(tǒng)然后passwd 用戶名重置。在Windows的命令行磁盤里直接訪問WSL文件notepad \\wsl$\Ubuntu-22.04\home\dev\test.txt。反過來在WSL里訪問Windows文件/mnt/c/Users/你的用戶名/Desktop。這個(gè)互通機(jī)制非常好用我經(jīng)常在WSL里直接用cp /mnt/d/xxx.iso ./把Windows下載的文件拿進(jìn)來。WSL關(guān)機(jī)和重啟wsl --shutdown關(guān)掉整個(gè)WSL不包括發(fā)行版單獨(dú)重啟某個(gè)發(fā)行版wsl -t Ubuntu-22.04之后再wsl -d Ubuntu-22.04。設(shè)置默認(rèn)用戶修改/etc/wsl.conf的[user] defaultxxx或者Windows側(cè)執(zhí)行wsl -d Ubuntu -u 用戶名進(jìn)入后用它初始化。備份整個(gè)WSL系統(tǒng)wsl --export加wsl --import我已經(jīng)不記得用這招遷移過多少次系統(tǒng)了換電腦、重裝系統(tǒng)都不怕。WSL里裝GUI程序sudo apt install geditWSLg在Win11上會自動(dòng)給你開個(gè)窗口Win10老版本需要額外配置X Server。日常開發(fā)一般用不到知道有這回事就行。查看WSL里的線程和內(nèi)存占用Windows任務(wù)管理器里勾選“WSL”相關(guān)列你會發(fā)現(xiàn)每個(gè)WSL進(jìn)程都帶著后綴顯示。控制WSL內(nèi)存上限.wslconfig里配置[wsl2] memory8GB可以限定WSL最大占用內(nèi)存防止大任務(wù)把Windows整個(gè)拖垮。這是做深度學(xué)習(xí)時(shí)保Windows流暢的重要設(shè)置。后記這套組合我是怎么持續(xù)用的配置WSL并在VSCode里打開這件事第一次做永遠(yuǎn)是最費(fèi)勁的。裝完以后日常使用基本就是兩條路在Windows終端里敲wsl進(jìn)Linux或者在VS Code里點(diǎn)一下綠色圖標(biāo)連進(jìn)去。兩個(gè)入口殊途同歸不會打架。我個(gè)人的習(xí)慣是寫代碼用VS Code的Remote-WSL打開項(xiàng)目跑命令用Windows Terminal切到Ubuntu的tab調(diào)試用VS Code里的終端。這樣一來Windows上做Office、聊天、瀏覽網(wǎng)頁Linux環(huán)境跑代碼、跑訓(xùn)練、搞CTF老死不相往來的兩個(gè)世界變成一家人。最后分享一個(gè)這些年反復(fù)用到的經(jīng)驗(yàn)如果你幫別人配置WSL別盯著他敲命令先把.wslconfig文件建好——鏡像網(wǎng)絡(luò)開啟、內(nèi)存限制合理設(shè)置、swap適度然后再談安裝發(fā)行版。基礎(chǔ)網(wǎng)絡(luò)和資源隔離先解決后面遇到的坑直接少一半。至于有人糾結(jié)“WSL算不算真正的Linux”我的看法是打死結(jié)的從來不是環(huán)境而是需求和工具的匹配度。WSL就是恰好卡在Windows用戶需要Linux環(huán)境這個(gè)夾縫里的最佳答案它不完美但足夠好。如果你在照著這篇文章折騰的過程中遇到了我沒提到的報(bào)錯(cuò)多看一眼報(bào)錯(cuò)信息的鏈路——WSL的報(bào)錯(cuò)設(shè)計(jì)雖然看起來嚇人但核心往往藏在/后面的最后一個(gè)字段里那個(gè)才是真正要解決的問題。