ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

WSL2安装与Linux开发环境搭建全指南:从零配置到Python与VSCode远程开发

WSL2安装与Linux开发环境搭建全指南:从零配置到Python与VSCode远程开发 第一次接触Linux的时候我大概和大多数人一样先想到装个双系统折腾半天开机引导出问题后来退而求其次用虚拟机内存被吃光风扇吼得像飞机起飞干脆去搞一台云服务器命令是好学了可本地文件来回同步又是新的麻烦。直到后面换了思路直接在 Windows 下面用 WSL2 搭建 Linux 学习环境一套系统同时满足日常办公和 Linux 开发需求这才算真正把环境问题解决了。这篇文章我打算把整个 WSL2 安装与 Linux 环境搭建过程完整梳理一遍从准备工作、安装步骤、初始化配置到 Python 开发环境、VSCode 远程开发和常见问题排查都会讲到。无论你是刚接触 Linux 的小白还是想把开发环境从虚拟机迁到 WSL2 的老手这篇应该都能提供一个可直接照做的参考。1. 为什么偏偏是 WSL2Windows 下学 Linux 的环境痛点1.1 传统方案的痛虚拟机、双系统、云主机各有各的坑我见过很多同事学 Linux 的第一反应就是装 VMware 或者 VirtualBox然后下载一个 Ubuntu 镜像老老实实安装。虚拟机方案最大的问题是资源损耗Windows 本身吃内存Linux 虚拟机又要再分 4GB 甚至 8GB开个 IDE 加上浏览器16GB 内存的机器直接见底。另外虚拟机里操作有延迟感文件共享配置也麻烦用起来更像是在“参观动物园”而不是真正在“养动物”。双系统方案就更极端了虽然性能是原生的但想从 Windows 切到 Linux 必须先重启等 30 秒再进系统日常使用基本不可能做到。而且双系统的引导配置一旦出错轻则 grub 界面卡住重则连 Windows 都进不去我当年就吃过这个亏。云服务器方案性价比倒还行但网络延迟、文件传输、编辑器同步这些问题始终存在对于本地开发和学习来说总隔了一层。1.2 WSL1 和 WSL2 到底差在哪WSL 第一代出来的时候大家一度很兴奋但很快发现问题不少。WSL1 其实是一个翻译层把 Linux 系统调用翻译成 Windows 的系统调用好处是启动迅速、文件访问快坏处是有些底层功能不支持比如很多依赖 Docker、GPU 计算、iptables 的程序根本跑不起来内核模块更是想都别想。WSL2 则是完全换了个思路它用真正的 Linux 内核跑在微软定制的轻量级虚拟机里。注意这里不是传统的 VirtualBox 那类全功能虚拟机WSL2 的虚拟机与 Windows 系统共享内核管理启动速度非常快内存也可以动态回收绝大多数 Linux 应用装上就能跑Docker、PyTorch、CUDA 都不在话下。我自己从 WSL1 切到 WSL2 之后最大的体会就是“突然之间也不用再纠结什么兼容性问题了”。1.3 WSL2 适合谁不适合谁如果你主要是学基础命令、写 shell 脚本、运行 Python/Node 项目、跑 Docker那 WSL2 非常适合。但如果你需要做内核模块开发、要自己修改 Linux 内核代码然后启动或者必须依赖某些 USB 设备的强实时功能那我还是建议老老实实上虚拟机或者实体机。WSL2 的定位是“开发环境”不是“完整的生产 Linux 主机”认清楚这一点后面使用心态会稳很多。2. 安装前的检查与准备先确认几个条件别急着敲命令2.1 系统版本要求WSL2 对 Windows 版本有明确要求。Windows 11 全版本都支持Windows 10 需要 1903 或 1909 版本且必须已经安装了 2020 年 5 月之后的更新补丁。Windows 10 2004 及以上版本当然也是没有问题的。如果你机器上还是 Windows 10 1809 这类老版本我建议先把 Windows 更新补丁打全或者直接升级到 Windows 11不然装到一半卡住会很尴尬。检查系统版本的方法很简单按 Win R输入winver回车就能看到一个关于 Windows 的弹窗版本号一目了然。要是版本低于要求先在“设置 - 更新和安全 - Windows 更新”里把系统升上去再继续。2.2 打开 CPU 虚拟化WSL2 毕竟是跑轻量虚拟机所以 CPU 虚拟化技术必须开启。一般 Intel 平台叫 Intel VT-xAMD 平台叫 SVM。开机时按 Del 或 F2 进 BIOS在 Advanced 或者 Processor 相关选项里找到 Virtualization Technology 或 SVM Mode改成 Enabled保存退出即可。如果这一步没开装好后启动 WSL2 大概率会报WSL_E_INSTALL_VM_FAILED之类的错误提前检查能省下不少排查时间。有些品牌机默认可能已经开启了虚拟化你可以打开任务管理器切到“性能”标签看右下角“虚拟化”这一项是不是显示“已启用”。如果是“已禁用”就必须进 BIOS 手动开。2.3 开启 Windows 的“适用于 Linux 的 Windows 子系统”功能这一步在较新的 Windows 版本里通常会被wsl --install命令自动处理但为了稳妥我还是建议手动确认一下。打开“控制面板 - 程序 - 启用或关闭 Windows 功能”勾选“适用于 Linux 的 Windows 子系统”和“虚拟机平台”两个选项然后按提示重启。以后如果你要用 Docker Desktop这个“虚拟机平台”也是必需的提前开好没有坏处。2.4 顺手装一个 Windows TerminalWSL2 的命令行体验高度依赖终端工具老式的 conhost 窗口在字体渲染、窗口缩放、复制粘贴上都挺别扭。我建议直接从微软商店安装 Windows Terminal它支持多标签页、自定义配色、快捷键对日常操作和以后同时开多个 SSH 会话都非常友好。安装完成以后可以在 Windows Terminal 的设置里把默认终端改成 WSL 发行版这样每次打开终端就直接进入 Linux 环境少一层切换的功夫。3. WSL2 安装完整步骤从一条命令到进入 Linux 系统3.1 最简单的安装方式wsl --install如果你用的是 Windows 11 或者较新的 Windows 10安装 WSL2 现在非常简单管理员身份打开 PowerShell 或 Windows Terminal直接输wsl --install这条命令会自动做几件事启用 WSL 功能、启用虚拟机平台、下载并安装最新的 WSL2 内核、默认安装 Ubuntu 发行版。整个过程基本不需要额外干预装完以后重启电脑系统会自动弹出 Ubuntu 初始化窗口让你设置用户名和密码。需要注意wsl --install默认安装的发行版是 Ubuntu这是我最推荐新手使用的 Linux 发行版原因有几点文档资料最多、包管理器 apt 使用简单、社区遇到问题搜一下基本都有答案。如果你有特殊需求比如想用 Fedora、Debian、openSUSE、Kali可以在安装之前先执行wsl --list --online查看当前支持的发行版列表然后用wsl --install -d 发行版名指定安装。3.2 确认并切换 WSL 默认版本安装完成后建议先执行一下wsl --version确认 WSL 相关组件都是最新的。如果输出的版本号不是特别新可以用wsl --update手动升级内核。这一步很重要因为 WSL2 的很多新功能都是随内核更新发布的比如镜像网络模式的支持、systemd 的支持等。然后确认当前发行版运行在 WSL2 上wsl --list --verbose看到VERSION那一列是 2 就说明没问题。如果显示的是 1执行下面这条命令把默认版本设为 2wsl --set-default-version 2也可以针对单个发行版单独设置wsl --set-version Ubuntu 23.3 设置登录用户与 root 密码第一次启动发行版的时候Ubuntu 会要求你设置一个用户名和密码。这里有个细节容易被忽略你在 Ubuntu 里设置的这个用户虽然默认有 sudo 权限但密码和 Windows 账号密码没有任何关系。也就是说以后你每次进入 WSL2如果不加限制它会自动以你创建的这个用户身份登录不需要重复输入密码。但是执行 sudo 命令的时候会要求输入用户密码所以密码别设得太随意。如果你和我一样装了 Ubuntu 之后发现忘记设置的密码是什么可以在 PowerShell 里进入默认 root 用户wsl -u root然后执行passwd 用户名来重置密码。3.4 验证安装是否成功进入系统以后先跑几条命令感受一下uname -a cat /etc/os-release ip addr看到Linux ... microsoft-standard-WSL2这类内核标识说明你的环境确实是 WSL2 内核。/etc/os-release会显示发行版名称和版本号。ip addr能看到 eth0 网卡信息记得记住这个 IP后面配置服务、互相访问的时候会用到。4. 第一次进入系统的初始化换源、更新、装基础工具4.1 配置国内 apt 源别让网络拖慢你WSL2 的 Ubuntu 默认使用官方的 apt 源在国内下载软件包有时候会很慢几十 KB/s 的速度让人崩溃。我每次装完系统第一件事就是换源。这里推荐阿里云或者清华大学的镜像源以清华源为例sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak sudo sed -i s/archive.ubuntu.com/mirrors.tuna.tsinghua.edu.cn/g /etc/apt/sources.list sudo apt update注意不同版本的 Ubuntu 源文件格式可能有细微差别如果你发现 sed 替换生效不了就直接打开/etc/apt/sources.list手动改或者去清华大学镜像站首页复制对应版本的完整源内容覆盖进去。4.2 更新系统并安装常用软件包更新源之后执行一次全量升级sudo apt update sudo apt upgrade -y这个过程会比较长但建议不要跳过。升级完成后安装一些非常基础的工具包括构建工具和网络工具sudo apt install -y build-essential curl wget git vim net-tools openssh-server ca-certificatesbuild-essential包含了 gcc、g、make 等编译必备工具以后编译 Python 扩展、装一些需要源码编译的软件都会依赖它。net-tools提供 ifconfig 等命令方便你查看 IP。openssh-server是为了以后从 Windows 侧用 SSH 连接 WSL2 准备的虽然 VSCode 有更便捷的方式但 SSH 本身作为 Linux 学习的一部分还是值得装上的。4.3 配置 systemd可选但推荐WSL2 新版内核已经原生支持 systemd但默认可能没有开启。如果以后要跑 Docker、SSHD、MySQL 这类服务systemd 能带来很多便利不用手动敲一堆启动命令。你可以在 WSL2 里编辑/etc/wsl.conf[boot] systemdtrue然后在 Windows 的 PowerShell 里执行wsl --shutdown重启 WSL再次进入系统后执行systemctl list-units --typeservice验证能看到一堆 already active 的服务说明 systemd 已经生效。如果你使用的 WSL 版本比较老不支持 systemd那么后续服务的启动方式就要改成手动后台启动这样也不会妨碍使用只是操作上稍微繁琐一些。4.4 学会这几个 Linux 命令再开始环境搭好之后我强烈建议你先把下面这几类命令刻意练熟。不用背太多但常用的一定要有肌肉记忆文件操作ls、cd、cp、mv、rm、mkdir、find、grep权限相关chmod、chown、sudo、su进程管理ps、top、htop、kill、systemctl网络相关ip addr、ping、curl、wget、ss、netstat每天配合 Ctrl R 搜索历史命令以及man命令查文档基本上两周就能养成在终端里工作的习惯。我之前在培训的时候见过不少人的误区就是一上来就折腾 zsh、tmux、vim 插件这种“装修工程”结果基础命令没掌握环境越搞越乱。我的建议是先用默认终端和 vim跑顺一套基础流程再慢慢锦上添花。5. Windows 与 WSL2 的互操作文件、网络、剪贴板5.1 文件系统跨平台访问互不隔离WSL2 的根目录在 Windows 侧看起来很特殊你可以在 Windows 资源管理器地址栏输入\\wsl$\直接访问 Linux 的文件系统。反过来Windows 的所有盘符会被自动挂载到 WSL2 的/mnt/c、/mnt/d等位置。这套机制最大的好处是我可以继续用 Windows 上的浏览器、IDE、截图工具处理东西同时又能在 Linux 环境里做开发。但这里有一个性能陷阱必须提醒如果你频繁在 Windows 侧访问 Linux 文件的场景比较简单比如只是打开个配置文件那没问题。但如果你要在 Linux 环境里编译大型项目、跑数据库却把代码放在 /mnt/c 下而不是 Linux 文件系统里速度会明显变慢。这是因为跨文件系统属于 9P 协议转发IO 开销比较大。我一般会把项目代码放在 WSL2 的~/projects目录下需要和 Windows 交换数据时再用文件管理器或cp来批量拷贝。5.2 网络服务互通与固定 IP 问题WSL2 使用的是 NAT 网络模式它有自己的虚拟网卡和 IP 地址。Windows 侧可以通过这个 IP 直接访问 WSL2 里的服务比如你在 WSL2 里启动了 Flask 或者 Jupyter Notebook浏览器可以直接访问http://localhost:端口号这是微软做的 localhost 转发机制体验很好。不过 WSL2 的 IP 地址会随着重启变化所以如果你在 Windows 侧配置了某个服务依赖固定 IP可能会失效。解决方案有两种要么每次启动动态获取然后自动更新配置要么直接用 localhost 转发而不是 IP。如果你用 Docker Desktop它还会额外占用一些网络资源这些在新版本的 WSL2 里大都自动处理好了一般不需要手动干预。5.3 剪贴板、文本和图片复制WSL2 已经支持剪贴板互通。在终端里选中文本按 Ctrl C到 Windows 应用里 Ctrl V 就能粘贴出来。反向操作也一样Windows 复制的内容可以直接粘贴到终端里。这个功能虽然简单但实际使用频率非常高。我第一次用的时候还没有这个能力经常要在终端和文本编辑器之间反复折腾现在舒服多了。需要注意的是Windows Terminal 默认的 Ctrl C/V 对应终端的复制粘贴而 Linux 常见的 Ctrl Shift C/V 在某些配置下未必绑定。自己在 Windows Terminal 的设置里把快捷键调成习惯的样式效率会更高。5.4 在 WSL2 里直接调用 Windows 程序这是很多人不知道的隐藏技巧WSL2 会把自己放在 PATH 里的 Windows 可执行文件也暴露给 Linux 侧。也就是说你可以在 WSL2 终端里直接输入notepad.exe打开记事本编辑文件输入explorer.exe .打开当前目录的 Windows 资源管理器。比如我在 WSL2 里想要快速查看某个配置文件直接notepad.exe ~/.bashrc这种跨进程调用偶尔会有一些小坑比如从 WSL2 启动 Windows 的 GUI 程序时环境变量传递不完全但一般使用完全足够了。真要追求无缝体验后面可以配合 VSCode 的 Remote 开发达到更理想的状态。6. 搭建 Python 开发环境从版本管理到 PyTorch6.1 先装 Python 还是直接上 CondaLinux 学习环境里Python 几乎是绕不开的。Ubuntu 系统本身可能自带 Python 3但你最好别直接拿系统 Python 去做开发因为系统包管理器依赖它你乱装包很可能把系统搞挂。我的建议是使用虚拟环境把项目之间的依赖隔离开。两种路径供选择如果你项目比较轻量直接使用 Python 自带的venv就足够。如果你要经常做数据分析、跑深度学习建议安装 Miniconda用 conda 管理环境更省心。Miniconda 的安装方式很简单从官网下载脚本然后执行bash Miniconda3-latest-Linux-x86_64.sh下载之前注意一下清华源国内直接用官网链接可能慢到怀疑人生。Miniconda 安装完以后建议顺手把 conda 的默认源也换成清华镜像环境创建速度会快很多。6.2 创建独立的 Python 开发环境我以一个常见的“数据分析 AI 入门”场景为例。创建环境并激活conda create -n ml python3.10 conda activate ml在这个环境里安装常见的科学计算包pip install numpy pandas matplotlib scikit-learn如果你后续要跑深度学习安装 CPU 版本的 PyTorch 可以先用pip install torch torchvision torchaudio如果是 NVIDIA 显卡用户想利用 GPU 加速需要先在 Windows 侧安装好 NVIDIA 驱动然后在 WSL2 里安装 CUDA 工具包和 PyTorch 的 GPU 版本。微软官方文档专门有一篇讲 WSL2 里的 CUDA 支持直接搜“WSL2 CUDA”就能找到官方步骤。这里有个常见的疑问“WSL2 里英伟达驱动生效吗”结论是可以生效Windows 侧的驱动会通过 WSL2 的内核传递给 Linux 环境你在 WSL2 里执行nvidia-smi能看到显卡信息就说明一切正常。6.3 写个简单脚本验证环境为了确保环境没问题新建一个 Python 文件测试import sys import numpy as np print(sys.version) print(np.__version__) print(np.random.rand(3, 3))在终端里用python test.py运行看到输出就说明环境正常了。我的个人习惯是每次新装环境都用这种几十行的小脚本先跑通再开始做正事别等到项目写到一半才发现环境缺库排查成本会翻很多。6.4 关于 Jupyter Notebook 与远程访问在 WSL2 里启动 Jupyter Notebook 是一件很爽的事情pip install jupyter jupyter notebook --no-browser --port8888然后在 Windows 浏览器里访问http://localhost:8888输入 token 就能用。注意 token 在终端启动日志里可以看到。如果你在 WSL2 里跑的是各种服务器程序只要监听的端口和 Windows 侧不冲突localhost 转发通常都能用。7. 用 VSCode 开发 WSL2 项目远程开发工作流7.1 VSCode WSL 扩展如果只是用终端敲命令很多图形化调试工作还是不方便。我的主力开发姿势是 VSCode 配合 WSL 扩展。在 Windows 侧安装好 VSCode 以后在扩展商店搜索WSL并安装微软官方的 Remote - WSL 扩展。然后在 WSL2 终端里进入项目目录执行code .VSCode 会自动检测到当前目录在 WSL2 内然后远程连接并打开这个目录。你不需要安装任何 Linux 侧编辑器所有界面都在 Windows 上渲染但实际编译执行都在 WSL2 里进行体验非常接近原生。7.2 安装扩展时注意环境Remote - WSL 有个特点扩展分为两类一类是运行在 Windows 侧的 UI 扩展比如主题、图标另一类是运行在 WSL2 侧的扩展比如 Python、Jupyter、GitLens。当 VSCode 连接 WSL2 后扩展面板会提示你哪些扩展安装到了远程端。如果你发现 Python 解释器识别不了多半是扩展没装到远程端。解决办法是在扩展详情页选择“在 WSL: Ubuntu 中安装”。7.3 Git 和代码管理的几个小建议WSL2 里安装 git 之后你的 SSH 密钥、git 配置都要重新设置一遍。建议把 SSH 密钥单独放到 WSL2 的~/.ssh目录并把权限设置严格一点chmod 700 ~/.ssh chmod 600 ~/.ssh/id_rsa提交信息、分支策略这些经验就不展开了只强调一点让 VSCode 在 WSL2 里使用 Git 时一定要确认终端和 IDE 里用的都是同一个 Git 版本不然有些换行符、文件模式问题会烦死你。可以通过在 VSCode 终端运行git --version和 Windows Git Bash 里的版本对比确保两者一致。7.4 调试和端口转发的联动VSCode 集成了端口转发功能比如 WSL2 里启动了 Flask 服务VSCode 底部的“端口”面板会自动识别并帮你把端口映射到 Windows 的 localhost。这个功能在调试 Web 应用时极其好用不用手动去查 IP 也不用配置防火墙。如果你的服务没有自动检测到也可以在端口面板手动添加需要监听的端口。8. 高频问题排障从装不上到磁盘膨胀8.1 安装过程中容易翻车的地方不少人在wsl --install之后发现没有自动安装 Ubuntu或者卡在下载内核那一半。常见原因包括Windows 功能没有启用完整尤其是“虚拟机平台”BIOS 虚拟化没开Windows 更新没打全。排查定位就是三步先wsl --status查看当前状态再检查 Windows 功能设置里两项是否已勾选最后确认任务管理器的“虚拟化”是否显示已启用。基本能覆盖 90% 的安装问题。还有种情况是网络问题导致内核下载失败可以先wsl --update手动执行更新或者从微软官方 GitHub 仓库下载内核安装包离线安装。这部分我不展开太多但记住一点安装失败时不要反复重试同一命令先看错误码再对症下药。8.2 域名解析失败和网络异常WSL2 偶尔会出现能连通外网 IP但域名解析失败的情况表现为apt update报错或者ping域名不通。这多半是/etc/resolv.conf里的 DNS 服务器指向了错误的虚拟网卡。一个常见修复方法是编辑/etc/wsl.conf添加[network] generateResolvConf false然后手动创建/etc/resolv.conf写入公共 DNS比如 223.5.5.5并设置不可被覆盖sudo chattr i /etc/resolv.conf注意这样修改后以后每次启动系统 DNS 配置都不会自动更新如果公司网络有内网域名需求需要自己根据实际情况调整。8.3 磁盘空间被吃光和 vhdx 膨胀问题WSL2 的虚拟磁盘文件.vhdx只会增长不会自动回收。你明明在 Linux 里删了几个大文件Windows 侧的磁盘占用却没有降下来这是正常的因为磁盘空间已经被虚拟机预分配了。要压缩它先关掉 WSL2wsl --shutdown然后在 Windows 侧以管理员身份打开 PowerShell找到发行版的 vhdx 文件路径执行diskpart select vdisk fileC:\Users\你的用户名\AppData\Local\Packages\CanonicalGroupLimited...\LocalState\ext4.vhdx compact vdisk detach vdisk这个操作能收回一部分未使用的空间。当然更彻底的办法是定期审查你 WSL2 里保存的文件特别是 Docker 镜像、conda 缓存、npm 缓存清理一下很多时候空间问题迎刃而解。8.4 内存占用过高WSL2 默认会从 Windows 动态申请内存最大可以占到物理内存的 50% 甚至更多。如果你的机器只有 8GB 内存跑两个 WSL2 服务再加浏览器就会很紧张。解决办法是在 Windows 用户目录下创建.wslconfig文件限制 WSL2 的资源使用[wsl2] memory4GB processors4 swap2GB修改后执行wsl --shutdown再重新启动配置生效。实测这样设置以后日常浏览网页、写代码的流畅度会明显提升代价是 WSL2 里跑大型构建任务时会稍慢但总体取舍是值得的。8.5 WSL2 与防病毒软件、代理工具的冲突在部分带有网络过滤功能的软件环境下WSL2 的虚拟网卡流量可能会被拦截导致 WSL2 内无法访问外网或访问 Windows 主机异常。如果遇到这种问题建议先把相关功能关闭测试确认是冲突后再决定是否加入白名单。另外新版本 WSL2 提供了镜像网络模式通过.wslconfig里的networkingModemirrored可以将网络接口直接镜像到 Windows 主机很多网络兼容性问题在这种模式下会大幅减少。不过这种模式在某些服务绑定场景下也有新坑建议按需尝试不要无脑开启。9. 最后再聊两句实在话我现在的基本环境配置就是 Windows 11 Windows Terminal WSL2 Ubuntu Zsh VSCode Remote日常的脚本调试、Python 数据分析、Docker 容器测试全部在 WSL2 里完成Windows 侧只承担浏览器、微信、办公软件这些任务。用了这么久最大的感受就是它把“学习和使用 Linux”的门槛降到很低——你不用再去折腾分区、引导、双系统切换也不用为一个apt install纠结半天打开终端就是完整的 Linux 发行版这种感觉非常适合新手入门。如果你完全没接触过 Linux我的建议是先把基础命令练熟再尝试在 WSL2 里装一个 Navicat 或者其他 GUI 工具通过 X Server 连上来用等熟悉了再深入系统服务、网络配置这些内容。环境的搭建并不难难的是坚持每天在终端里动手敲几行。希望这篇文章能帮你在 Windows 上顺利迈出第一步少走一些我当年绕过的弯路。
返回列表