Windows11系统使用WSL2创建Ubuntu子系统并配置深度学习环境加VScode+ Claude code +deepseek API
一、写在前面
1.为什么用Linux系统做为开发工具,有什么优势
废话版
- 1.真正的“类Unix”开发环境
- 原生工具链:很多开发工具(如
gcc/g++、make、git、ssh、vim、python、node)为Linux设计。在Linux里,打开终端就能直接使用;在Windows上则需要安装复杂的模拟环境(如MinGW、Cygwin或WSL)。 - 命令行强大:Linux的Bash、Zsh等Shell配合
grep、awk、sed、管道等命令,能极其高效地完成文件处理、日志分析、进程管理等任务,远超Windows的CMD或PowerShell。
- 原生工具链:很多开发工具(如
- 2.与服务器环境完全一致
- 互联网上绝大多数服务器(超过70%的网站服务器,以及云端虚拟机)运行的是Linux(如Ubuntu、CentOS、Debian)。在Linux本地开发的代码,直接部署到Linux服务器上基本不会出现环境差异问题。
- 而Windows开发的程序(如依赖注册表、反斜杠路径、特定驱动)放到Linux服务器上可能需要大量修改。
- 3.包管理器:一键安装开发库
- Linux的包管理器(如
apt、yum、pacman)能像手机应用商店一样,一条命令安装几乎所有开发工具和依赖库。例如:sudo apt install build-essential libssl-dev。 - Windows需要手动去各个官网下载安装包、配置环境变量,管理依赖库则常常令人头疼(DLL Hell)。
- Linux的包管理器(如
- 4.开源与透明
- 代码开源意味着出现BUG或有特殊需求时,开发者可以查看甚至修改操作系统和库的源代码。
- 系统配置通过清晰的文本文件完成(如
/etc/nginx/nginx.conf),便于版本控制(Git)和自动化运维(Ansible、Docker)。Windows的注册表机制复杂且难以脚本化。
- 5.轻量高效,资源占用低
- 不带图形界面的Linux服务器版只占用几百MB内存,而Windows Server动辄2-4GB。这意味着一台低成本云服务器上,Linux可以运行更多服务。
- 文件系统(如ext4、XFS)和高并发网络模型(epoll)在大量小文件读写、网络连接处理上性能更优。
- 6.对容器和云原生友好
- Docker、Kubernetes、Istio等现代云原生技术本身诞生于Linux。在Linux上运行容器性能接近原生(不需要像Windows那样使用Hyper-V虚拟机)。
- 几乎所有CI/CD流水线(Jenkins、GitLab CI、GitHub Actions)的默认运行环境都是Linux。
- 7.社区与习惯
- 开源项目几乎都以Linux为“一等公民”提供支持。例如,Python的很多科学计算库、Node.js的native addon、Ruby的gem在Linux上编译安装最顺畅。
- 新手遇到报错,搜索引擎中大部分解决方案也是针对Linux系的。
思考版
对于我做深度学习,之后想做机器人开发来说: 1.有些库使用Linux的包管理器管理就很方便。 2.可能有些包或者软件第一时间会发行Linux版本的或者只在Linux系统下有,例如ros就需要在Ubuntu下开发使用,再比如,现在许多的项目都在Linux系统下开发,我从开源网站pull一个想学习的项目,但这个项目是在Linux系统下开发的,给出的environment.yaml文件中需要的环境有很多基于Linux系统,我在Windows系统下复现就不得不面临环境配置问题,只能一个个去找这些库在Windows系统下的平替,十分麻烦。 3.Linux系统资源占用低,在跑深度学习代码时,释放性能更优,速度更快。 4.在Linux本地开发的代码,直接部署到Linux服务器或云服务器上基本不会出现环境差异问题。 5.拓展思维视野、学习提高。大量的服务器基于Linux运行,大量的智能设备基于Linux。在Linux系统无处不在的情况下,对Linux一无所知必然会给开发生涯造成很大的制约。2.为什么选择WSL
正如前面所说,Linux系统适合作为一个开发工具,主要解决环境问题,代码运行等。但有经验或者想要有更好体验的开发人员不应该直接用Linux去进行开发。 实际生活中,会用到很多其他软件,例如Microsoft Office、QQ、微信、游戏等,这些软件仍然是Windows系统的护城河。虽然有些软件在Linux系统上有平替但体验和生态完整度仍有差距,因为在桌面操作系统领域,Windows长期占据全球约70%-80%的市场份额,Windows系统下的软件自然更新快,商业决策自然倾向Windows。Windows商业软件公司有专职UI/UX设计师、用户调研团队,会投入大量资金打磨交互细节。Linux上的开源软件通常是开发者“我需要这个功能,顺手写一个”,界面可能停留在工程师审美,用户体验的差距显而易见。 在从大一就开始使用双系统的经历来说,双系统虽然可以更好的释放硬件性能,但来回切换系统的操作实在麻烦,反人类;况且一旦环境被配置到不可挽回的地步,重新安装双系统的步骤甚是繁琐。虚拟机的性能太差,速度慢,且不能显卡直通(现在貌似可以)。远程开发没有(云)服务器或第二台设备。 综上在此选择Windows11 + WSL + IDE Remote-WSL + Docker插件的方式进行日常学习生活开发。WSL2既可以享受Windows的熟悉的操作界面;又可以使用Ubuntu+Docker实现规范的、隔离的、可复现的开发流程;同时两个系统之间的交互,相对与双系统或两个物理机更方便;而且又不像传统虚拟机那样性能损失太大。经过trade off,达到了一个比较合理的平衡。二、WSL+Ubuntu22.04安装
1.打开Windows的三个虚拟化功能
启动或关闭Windows功能,勾选Hyper-v、适用于Linux的Windows子系统、虚拟机平台完成后等待启动后根据提示重启电脑
2.安装WSL2和Ubuntu
现在,可以使用单个命令安装运行 WSL 所需的一切内容。 在管理员模式下打开 PowerShell
# 下载没有分发版的WSL,WSL默认下载在C盘wsl--install--no-distribution# 下载完成后打开WSL Settings --> 网络 --> 网络模式选择Mirrored# 打开WSL Settings --> 内存和处理器 --> 按需调整处理器计数,内存大小,交换大小# 下载Ubuntu,WSL分发版也会默认下载到C盘,此时加上--location指定将 WSL 分发版安装到提前准备好的磁盘空间里,避免之后C盘爆炸再导入导出的麻烦操作wsl--install--distribution--location#安装完成后会提示设置用户名和密码推荐将分发版固定到快速访问
WSL基本命令:Basic commands for WSL | Microsoft Learn
3.换源
若用apt安装开发工具,换一个国内的镜像源可以大幅提升下载速度
# 备份源文件sudocp/etc/apt/sources.list /etc/apt/sources.list.baksudonano/etc/apt/sources.list# 打开源文件,清空文件,并粘贴以下内容# 默认注释了源码镜像以提高 apt update 速度,如有需要可自行取消注释deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy main restricted universe multiverse# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy main restricted universe multiversedeb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-updates main restricted universe multiverse# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-updates main restricted universe multiversedeb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-backports main restricted universe multiverse# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-backports main restricted universe multiversedeb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-security main restricted universe multiverse# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-security main restricted universe multiverse# 先升级一下软件包sudoaptupdate&&sudoaptupgrdae-y# 安装git、ccurl、构建工具sudoaptinstallgitcurlbuild-essential-y# 配置git .gitconfig位于home目录下gitconfig--globaluser.name"Your Name"gitconfig--globaluser.email"your@email.com"gitconfig--globalinit.defaultBranch main三、配置深度学习环境
3.1 安装miniconda
wgethttps://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.shsudochmod777Miniconda3-latest-Linux-x86_64.sh ./Miniconda3-latest-Linux-x86_64.sh# 安装完成后conda会自动配置好环境变量source~/.bashrc# 如果WSL命令提示符前出现_(base)_即代表配置成功3.2 安装cuda
TODO:pytorch里自带了cuda运行时库和cudnn,不编译的话无需下载cuda-toolkit
在CentOS上PyTorch版本更新策略是什么 - 问答 - 亿速云里写道优先用 conda 管理cudatoolkit,减少与系统 CUDA 的耦合与冲突。
按理来说conda会将base环境与虚拟环境隔离开来,base下安装的cuda不会对虚拟环境产生影响,实测在base中没有下载cuda,虚拟环境环境中只下载pytorch的情况下torch.cuda.is_available()仍为true,猜测应该是pytorch里自带了cuda运行时库的原因
# 查看显卡驱动和最高支持的cuda版本nvidia-smi# 是否安装cuda-toolkitnvcc-V3.3 安装pytorch
按照PyTorch官网所给命令安装即可
pytorch安装在miniconda的虚拟环境里,先确定你要用的PyTorch 版本,它官方编译时用的什么 CUDA 版本,你就用什么版本。不要自己凭感觉装一个cudatoolkit。
# 完整验证脚本#!/usr/bin/env pythonimporttorchimportsysdefcheck_cuda():print("="*50)print("PyTorch CUDA 验证")print("="*50)print(f"Python version:{sys.version}")print(f"PyTorch version:{torch.__version__}")print(f"CUDA available:{torch.cuda.is_available()}")iftorch.cuda.is_available():print(f"CUDA version:{torch.version.cuda}")print(f"cuDNN version:{torch.backends.cudnn.version()}")print(f"Number of GPUs:{torch.cuda.device_count()}")foriinrange(torch.cuda.device_count()):print(f"\nGPU{i}:{torch.cuda.get_device_name(i)}")print(f" Memory:{torch.cuda.get_device_properties(i).total_memory/1e9:.2f}GB")# 测试基本操作x=torch.randn(3,3).cuda()y=torch.randn(3,3).cuda()z=torch.matmul(x,y)print(f"\n✓ GPU test passed! Result shape:{z.shape}")returnTrueelse:print("\n✗ CUDA is not available. Using CPU only.")returnFalseif__name__=="__main__":success=check_cuda()sys.exit(0ifsuccesselse1)四、VScode + Claude code + deeoseek API
4.1Vscode
把 VSCode 装在 Windows,再用插件连接 WSL,部分扩展(如C/C++扩展)在初次使用时会提示“Install in WSL”,点击确认即可安装到 WSL 环境。
项目文件放在 WSL 的/home/下,读写速度最快,也避免了 Windows 挂载点(/mnt/c)的权限和性能问题。
开发正确流程:
- Windows 启动 VSCode(不打开任何文件夹)
Ctrl+Shift+P→ 输入WSL: New Window→ 选发行版(如Ubuntu-22.04),再用File → Open Folder…打开 `/home/projects/my_project- 或者打开WSL终端
cd到my_project输入code.
验证是否成功
- 状态栏左下角显示
WSL: Ubuntu-22.04,新建终端自动是bash,且echo $PATH不含C:盘路径
4.2 claude code + deepseek API
目的:在Windows和WSL下都可以使用claude code for vscode插件
安装Claude code并配置deepseek API的教程网上已有很多,不再赘述,具体可参考
沉默的羔丸voov的个人空间-沉默的羔丸voov个人主页-哔哩哔哩视频 04-29 05-03两个日期的视频
Windows通过WSL安装和配置Claude Code分步指南-开发者社区-阿里云
Claude Code 安装 & 配置指南(Windows 10 + WSL2) - zheyi420 - 博客园
这里主要解决WSL中无法使用claude code for vscode插件的问题
4.2.1Windows
在Windows系统下推荐使用CC-switch,可以方便快捷的切换其他大模型。当然也可以配置
4.2.2 WSL
WSL中,好像是CC Switch在传模型映射到WSL下时,会不完整,开CC Switch在WSL下使用claude code插件是不会接入deepseek的,解决方法有三种如下:
- 配置settings.json
- 用户级配置:
~/.claude/settings.json - 项目级配置:
/home/user/projects/你的项目/.claude/settings.json
- 用户级配置:
- 配置环境变量
参考接入 Agent 工具 | DeepSeek API Docsvim ~/.bashrc并输入# <<< claude code initialize <<<exportANTHROPIC_BASE_URL=https://api.deepseek.com/anthropicexportANTHROPIC_AUTH_TOKEN=<你的 DeepSeek API Key>exportANTHROPIC_MODEL=deepseek-v4-pro[1m]exportANTHROPIC_DEFAULT_OPUS_MODEL=deepseek-v4-pro[1m]exportANTHROPIC_DEFAULT_SONNET_MODEL=deepseek-v4-pro[1m]exportANTHROPIC_DEFAULT_HAIKU_MODEL=deepseek-v4-flashexportCLAUDE_CODE_SUBAGENT_MODEL=deepseek-v4-flashexportCLAUDE_CODE_EFFORT_LEVEL=max# <<< claude code initialize <<<
观察发现无论是使用CC-switch,还是配置json文件,亦或是配置环境变量都是类似的
- 在WSL中下载CC-switch的Linux版本(本人并没有试过但感觉可以,应该也是CC-switch自动配置你WSL中的环境)
配置完成后就可以使用
参考教程:
VSCode配置WSL2环境 Windows必备VSCode开发Linux程序-VSCode-PHP中文网
Linux 深度学习环境搭建教程 ( WSL + miniconda + pytorch + cuda + cudnn + vscode) - 知乎
Windows下使用WSL2创建Ubuntu子系统(更改安装位置与启动图形桌面)
不想装双系统?WSL2+Docker,科学开发环境配置全流程_哔哩哔哩_bilibili
七十七的德的个人空间-七十七的德个人主页-哔哩哔哩视频
Windows环境下WSL部署GPU加速大模型推理框架全流程指南-百度开发者中心
官方文档:
CUDA on WSL 用户指南 — CUDA on WSL 13.2 文档
Windows Subsystem for Linux Documentation | Microsoft Learn
此文章仅作为学习记录、参考以及分享,深度学习环境配置部分还有许多疑点尚未搞清:
TODO
- 查阅CUDA官方文档的介绍如何在WSL安装CUDA,安装在base环境下还是每个conda环境下都需要安装
- pytorch中包含cuda运行时库和cudnn,是否还需要安装cuda-toolkit和cudnn
目前仍处于初步探索阶段,相关配置细节还在持续验证中,欢迎各位有相关实践经验的朋友指出错误、积极讨论、分享见解。
