拿到一台新Windows电脑,想入门深度学习,搜索栏里大概率会出现三个词:Anaconda3、PyTorch、Jupyter。这套组合几乎是所有深度学习教程的默认起点,B站上的小土堆笔记、各种PyTorch实战视频,全都默认你已经把这三个东西装好、跑通。但问题恰恰出在这里:环境搭建这一步劝退了大量新手,报错五花八门,还往往查不到能对上号的中文解决方案。

这篇博文我按自己这些年帮人配环境的经验,把从Anaconda3安装、PyTorch GPU/CPU版本选择、到Jupyter配置的完整流程重新梳理一遍。重点覆盖几个高频坑:conda命令无法识别、Jupyter报PermissionError [Errno 13]、装了GPU版但torch.cuda.is_available()返回False、RTX 50系新显卡搭配CUDA 12.8的注意事项,以及Intel显卡跑GPU版本PyTorch的可行路径。适合刚接触Python和深度学习的小白,也适合被各种环境问题折磨到想重装系统的老哥。

1. 方案选型:为什么是这三件套

1.1 Anaconda3:给Python套上“房间管理”

单独装Python本身不复杂,真正复杂的是Python包之间的依赖关系。比如项目A需要numpy 1.x,项目B需要numpy 2.x,如果你只有一个全局Python环境,装了这个就得卸那个。这种场景就像一个人只有一间房,衣服裤子全堆在一张床上:看起来都能找到,但当你需要“穿某件衣服出门”时,总得先把其他东西挪开。

Anaconda3解决的就是这个问题。它自带一个conda包管理器,可以创建多个互相隔离的虚拟环境,每个环境里有自己独立的Python解释器和包集合。PyTorch项目放进一个叫pytorch的环境,网页爬虫项目放进另一个环境,互不干扰,想删哪个直接整个环境删掉,不会把系统搞乱。Anaconda3还预装了conda、Python解释器以及一大批科学计算常见库(numpy、pandas、matplotlib等),开箱即用,省去新手挨个装包的痛苦。

如果你硬盘紧张,也可以考虑Miniconda——它相当于精简版,只保留conda和Python,其他包按需安装。但我给新手推荐时通常还是选Anaconda3:预装的东西多,学习阶段少踩一些缺包的坑,等你熟练了再换Miniconda完全不迟。

1.2 PyTorch为什么成了默认选项

做方案选型时,几乎每个人都会问:PyTorch和TensorFlow到底选哪个?我的回答很直接:2024年以后的新项目,尤其是学术研究、竞赛、论文复现,默认PyTorch,踩坑最少。

理由有三。第一,PyTorch用动态计算图,写代码的方式贴近原生Python逻辑,调试时可以随时print中间张量,就算报错也能很快定位;TensorFlow虽然也有Eager模式,但历史包袱重,很多老教程和代码库还在用静态图的写法,新手很容易被“两层API”搞晕。第二,HuggingFace生态默认支持PyTorch,现在做NLP、大模型相关的东西,几乎绕不开这个生态,你装好PyTorch就等于站到了主流模型库的门口。第三,PyTorch在学术界和Kaggle竞赛里的占比明显领先,复现论文里的代码时,PyTorch版本往往更容易跑通。

至于“TensorFlow 2.0训练速度比PyTorch慢”这类说法,我的经验是:在特定硬件和优化场景下差距没那么夸张,真要追求极致速度,往往还需要配合TensorRT、XLA之类的工具。对绝大多数学习者来说,开发效率和生态兼容性比那点训练速度差异重要得多。

1.3 安装前的关键分叉:CPU、NVIDIA GPU还是Intel GPU

这是整个安装流程里必须想清楚的问题。很多人不管三七二十一直接抄GPU安装命令,结果显卡不支持或者驱动太旧,折腾一晚上还是装了个CPU版,这种“假GPU环境”最坑。

简单分三类情况:

第一,只有核显、没有独立NVIDIA显卡,或者显卡是AMD的旧卡:直接装CPU版PyTorch。环境简单、不会报错,能跑通所有入门代码,只是训练速度慢,但学习阶段完全够用。

第二,有NVIDIA独立显卡(GTX 10系及以上):装GPU版。训练速度提升几个数量级,后面跑稍微像样点的模型都离不开它。

第三,Intel Arc独显或较新的Intel核显:可以走Intel官方扩展IPEX(intel-extension-for-pytorch)来调用GPU,但安装方式特殊,后面单独讲;NVIDIA显卡的常规命令在这里不生效,不用浪费时间试。

判断自己显卡类型很简单:右键“此电脑”->“管理”->“设备管理器”->“显示适配器”,看一眼型号就清楚了。这个步骤花不了30秒,但能帮你省下至少两小时的无效折腾。

2. Anaconda3安装与源配置

2.1 下载安装与两个关键选项

Anaconda3官方下载地址是anaconda.com/download,国内网络环境下,从官网下载安装包的速度通常还凑合,万一很慢,可以用清华开源软件镜像站的Anaconda安装包目录,找最新的Windows-x86_64.exe文件即可。

安装过程基本都是“下一步”,但有两个选项值得注意:

第一个是“Install for Me”还是“Install for All Users”。我的建议是选“Install for Me”,也就是只给当前用户安装。这样路径一般是C:\Users\你的用户名\anaconda3,写权限、环境变量都相对简单,后续Jupyter写文件之类的权限坑会少很多。选“All Users”往往装到C:\ProgramData\anaconda3,后面很容易撞上Program Files目录权限问题。

第二个是“Add to PATH”复选框。安装界面上通常还有一行“Add Anaconda3 to my PATH environment variable”,并且旁边往往有小字提示“不推荐”。这个选项的处理要分情况:如果这台电脑是全新的,没有其他Python环境,我建议直接勾选,省得后来出现“无法将conda项识别为cmdlet、函数、脚本文件或可运行程序的名称”这种报错;如果电脑上已经有别的Python(比如从Python官网装的,或者系统里某些软件自带Python),就不要勾选,避免污染系统PATH,后续统一用Anaconda Prompt操作。

我自己的习惯是:即使当时没勾选“Add to PATH”,安装完成后打开一次Anaconda Prompt,运行conda init cmd.exe或者conda init powershell,也能把conda注册到需要的Shell里。这两种方式等效,看个人习惯。

2.2 换源:不换源的安装体验会劝退一半人

Anaconda3装好后,第一件要紧事是给conda配上国内镜像源。我见过太多新手卡在“conda install pytorch”这一步,进度条走半天然后网络超时,接着就是一连串的SSL错误、Download error,最后情绪崩溃。

在Anaconda Prompt里执行这几条命令,把主源和PyTorch相关源都换成清华镜像:

conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/pytorch
conda config --set show_channel_urls yes

执行完后,可以查看用户目录下的.condarc文件确认配置。如果以后想恢复官方源,把.condarc文件删掉或重命名即可。

这里额外说一点:换了镜像源之后,conda安装包时的“Solving environment”阶段可能会变慢,这是正常的,镜像同步索引需要时间。遇到长时间卡着不动,耐心等一会儿,不要频繁Ctrl+C中断。真要卡到完全没响应,可以试试conda clean -i清理缓存后重试。

2.3 创建虚拟环境:给PyTorch单独开一间房

源配好后,创建PyTorch专用环境。在Anaconda Prompt里执行:

conda create -n pytorch python=3.10 -y

这条命令的意思是创建一个名为pytorch的虚拟环境,Python版本指定为3.10。版本选择上,我的建议是3.10或3.11,不要一上来就选最新的3.13。原因很实际:PyTorch和torchvision等核心库对新Python版本的官方轮子支持往往会滞后,网上大量教程、开源项目也都是基于3.8到3.11写的,用3.10能让你的环境和大多数示例代码对齐,少踩莫名其妙的兼容性坑。

创建完成后,激活这个环境:

conda activate pytorch

激活后,命令行提示符前面会出现“(pytorch)”字样,说明当前处于虚拟环境中。后续装PyTorch、运行Python脚本,都应该在这个状态下进行。

验证环境是否正常,可以执行python --version,看到类似“Python 3.10.x”的输出即可。如果想看目前电脑上有哪些conda环境,执行conda env list,带星号的就是当前激活的环境。

3. PyTorch安装:GPU版、CPU版与新版显卡

3.1 官网选型和命令背后的版本逻辑

PyTorch安装最权威的入口是pytorch.org/get-started,进去之后选择你的操作系统、包管理器、CUDA版本,网站会直接给出一行安装命令。比我对着你背命令靠谱得多,因为PyTorch版本更新很快,老文章里的命令很可能过时。

页面上的选项里,最容易让人迷惑的是CUDA版本号,比如CUDA 11.8、CUDA 12.1、CUDA 12.8、CUDA 13.0。这些数字对应的是PyTorch预编译时所带的CUDA运行时版本,命令里的标识一般写成cu121、cu128这样的缩写。选哪个取决于两点:一是你的NVIDIA驱动支持的CUDA版本,二是你的显卡架构是否被该版本支持。

查看驱动支持的CUDA版本,在命令行里执行:

nvidia-smi

右上角“CUDA Version”显示的就是当前驱动最高支持的CUDA版本。比如显示12.8,那选cu121、cu124、cu128这些都不算错,驱动能向下兼容。这里要澄清一个常见误解:这个数字并不代表你电脑里“已经装好了CUDA Toolkit”。PyTorch的GPU版之所以能跑,是因为它的wheel自带CUDA运行库,真正需要的是——只有“足够新的NVIDIA驱动”。不用专门去NVIDIA官网下载安装CUDA Toolkit,那一步是可以跳过的。

3.2 RTX 50系显卡:需要CUDA 12.8+的PyTorch

2025年入手RTX 5060 Ti、RTX 5070、RTX 5090这些50系显卡的人越来越多。注意,50系用的是Blackwell架构(计算能力代号sm_121),PyTorch官方从适配CUDA 12.8的wheel版本开始才加入对这部分新架构的支持。如果你按一些老教程装了cu121或者cu118的版本,代码能import torch,但一执行张量运算就会报“no kernel image is available for execution on the device”之类的错误,核心就是架构不匹配,内核不认识你的显卡。

所以50系显卡用户直接在PyTorch官网选择CUDA 12.8或更新版本,或者用pip方式安装,指定cu128索引:

pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu128

conda方式在某些情况下也能装,但conda源的pytorch-cuda版本更新节奏不如pip的whl仓库快,50系显卡用户如果发现conda装完跑不起来,优先换pip方式。

顺便回应一下热词里提到的“anaconda3 window安装whl”:如果你从PyTorch官网或者镜像站直接下载了.whl文件(也就是预编译的Python安装包),本地安装的命令是:

pip install 下载的文件名.whl

whl方式的好处是可以完全绕过conda的依赖解析,下载哪个版本就跑哪个版本。适合conda装不上、或者需要特定cu版本配套的时候。

3.3 CPU版安装(兜底方案)

没有NVIDIA显卡、或者暂时不打算折腾GPU的,CPU版安装极其简单:

pip install torch torchvision torchaudio

默认就会装CPU版本。装上后torch.cuda.is_available()返回False是正常的,代码能跑,就是慢。学习阶段跑跑MNIST、CIFAR-10这种小数据集,CPU版也不是不能接受,我在没有独立显卡的老笔记本上照样把一堆入门案例跑完了,只是batch size调小点,耐心多点。

3.4 Intel显卡的GPU训练:可以用IPEX但要注意硬件边界

Intel Arc A370、A750、A770这些独显,以及部分较新的Intel核显(如Arc核显),可以通过Intel官方扩展库IPEX(intel-extension-for-pytorch)调用GPU。基本思路是安装对应PyTorch版本的IPEX扩展包,然后在代码里导入并指定XPU设备。

安装命令大体形如:

pip install torch torchvision torchaudio intel-extension-for-pytorch --extra-index-url https://pytorch-extension.intel.com/release-whl/stable/xpu/us/

具体版本号要以Intel官方GitHub页面上的“安装矩阵”为准,因为IPEX版本和PyTorch版本是严格绑定的,装错版本直接import失败。

我的建议是:如果你的Intel硬件不是Arc系列独显,而只是普通核显,可以先不折腾IPEX,直接跑CPU版。核显在深度学习里性能提升有限,但配置成本一点也不低,学习和验证阶段不划算。等真正有性能需求,再回到这块深水区不迟。

3.5 安装后的“三查”验证

装完PyTorch,不管GPU版还是CPU版,都要到命令行里激活环境,然后做三重验证:

import torch
print(torch.__version__)
print(torch.cuda.is_available())
print(torch.cuda.get_device_name(0) if torch.cuda.is_available() else "CPU only")
  • 第一查:torch.__version__正常输出,说明包本身装好了。
  • 第二查:torch.cuda.is_available()返回True,说明GPU调用链路打通。
  • 第三查:torch.cuda.get_device_name(0)能看到你的显卡型号,说明PyTorch真正找到了你的卡。

如果你的显卡是新的RTX 50系,建议再补一句:

print(torch.cuda.get_device_capability(0))

输出类似(12, 1),意思是计算能力12.1(sm_121),能出现这个数字说明PyTorch内核确实认识你的显卡架构了。

4. Jupyter Notebook:从安装到顺手

4.1 安装Jupyter并把虚拟环境注册成内核

Jupyter Notebook的安装本身不费劲,但“在Jupyter里用PyTorch环境”这一步,新手经常会踩坑。坑的根源是这样的:你在命令行里激活pytorch环境后,pip安装的jupyter和pytorch都是环境里的;但如果你从开始菜单打开Jupyter Notebook,它可能运行在base环境,里面根本没有PyTorch,于是你写import torch直接报ModuleNotFoundError。

我的做法是:在pytorch环境里装好jupyter和ipykernel,然后把这个环境注册成Jupyter的一个内核,之后无论从哪里启动Jupyter,都能选择“Python (pytorch)”内核来运行代码,并且自动拥有PyTorch环境。

在Anaconda Prompt里,确保当前已经在pytorch环境(命令行前缀有pytorch字样),执行:

conda install jupyter -y
pip install ipykernel
python -m ipykernel install --user --name pytorch --display-name "Python (pytorch)"

第三条命令会把这个环境注册到当前用户的Jupyter内核列表里。启动Jupyter后,在“New”下拉菜单中如果能看到“Python (pytorch)”选项,就说明注册成功。新建笔记本后注意看右上角的“内核”名称,确认是python (pytorch)而不是python 3(base内核)。这一点确定了,你的Jupyter和PyTorch才算真正打通。

4.2 修改默认保存路径

Jupyter默认的保存路径通常是系统用户目录(C:\Users\用户名),把项目文件都堆在这里很不舒服。好多人想改到D盘专门的项目文件夹,改了配置却死活不生效,这个我深有体会。

先让Jupyter生成一份配置文件。在命令行里执行:

jupyter notebook --generate-config

这会在当前用户目录下生成.jupyter/jupyter_notebook_config.py。然后打开这个文件,找到这么一行:

# c.NotebookApp.notebook_dir = ''

把注释去掉,改成你想要的路径,注意Windows路径要用正斜杠或者双反斜杠:

c.NotebookApp.notebook_dir = 'D:/project_pytorch'

保存文件后重启Jupyter,理论上会直接打开这个目录。

但很多人在这一步之后发现根本没用,还是打开原来的位置。这里大概率是快捷方式在“捣鬼”:开始菜单里的“Jupyter Notebook”快捷方式很可能带了一个起始位置参数,会覆盖配置文件里的notebook_dir。解决办法是右键快捷方式 ->“属性”,把“起始位置”改成你期望的目录,或者干脆删掉快捷方式,以后在conda环境里直接敲jupyter notebook启动,配置一定能生效。这个“配置改了但快捷方式覆盖了”的坑,我至少见人踩过不下十次。

4.3 给Jupyter加上目录功能

看长笔记时没有目录非常痛苦,尤其深度学习教程类笔记动不动几百行代码和Markdown混排。传统Jupyter Notebook(6.x及更早版本)可以通过nbextensions扩展来实现目录功能:

conda install -c conda-forge jupyter_contrib_nbextensions -y
jupyter contrib nbextension install --user

装完后打开Jupyter,菜单栏会多出一个“Nbextensions”选项,进去勾选“Table of Contents (2)”即可。之后每个笔记本顶部会自动渲染出基于标题层级生成的目录导航。

需要注意:如果你用的是Jupyter Notebook 7.x(新版默认),nbextensions的兼容性变差,不少扩展直接失效。我的建议是,如果你到了Notebook 7这个阶段,直接改用JupyterLab,它自带文件浏览器和大纲/目录功能,不需要额外折腾插件。新手如果不想费劲,装Anaconda3自带的6.x版本就够用,版本没那么重要,能跑教程代码才是关键。

4.4 几个能明显提升使用体验的基础操作

环境配好后,顺手养成几个Jupyter使用习惯,学习效率会高很多。

单元格类型切换:在菜单栏把单元格从“Code”切到“Markdown”,就能写带格式的笔记,配合标题层级(#、##、###)可以在代码块之间插入清晰的说明文字,这也是目录功能生效的基础。

魔术命令:在代码单元格里输入%matplotlib inline,可以让matplotlib生成的图表直接显示在单元格下方,不用弹独立窗口;想统计一段代码的执行时间,用%%time放在单元格开头即可,训练深度学习模型时用来估算每个epoch的时间非常好用。

查看函数文档:在函数后面加问号,比如torch.nn.Linear?,会弹出该函数的签名和文档摘要;或者直接在代码里把光标放在函数名上,按Shift+Tab,也能看到简短说明。这些操作看似微不足道,但在没人指导的自学阶段,能极大减少谷歌搜索次数,让“自己弄明白”这件事变得可行。

5. 高频报错排查与后续实战衔接

5.1 conda不识别与PowerShell环境问题

热词里有句典型的报错:“PS D:\project_pytorch> conda activate pytorch conda : 无法将‘conda’项识别”,这个我太熟悉了。在PowerShell或者CMD里输入conda,系统直接说不认识这个命令,原因无非两种:

  • 安装Anaconda3时没勾选“Add to PATH”,且之后没有初始化过,系统找不到conda.exe所在的目录;
  • conda命令本身能用,但当前终端是从旧会话继承来的,没有加载新注册的环境变量。

解决办法分层次走。第一层,如果Anaconda3安装后你一次都没重启过PowerShell,先重启终端或者注销重登系统,很多时候环境变量只是没刷新。第二层,明确告诉当前Shell conda在哪,最简单的方法是初始化:

conda init powershell

这个命令会把conda的初始化脚本写入PowerShell配置文件。之后再重启PowerShell,conda就能正常识别。如果你平时用的是CMD,则执行conda init cmd.exe。如果前两层都无效,检查系统环境变量PATH里有没有C:\Users\你的用户名\anaconda3和C:\Users\你的用户名\anaconda3\Scripts这两项,没有就手动加上,再重启终端。

每次遇到这个报错,我都建议大家先想清楚一个问题:你正在用的这个终端,和你刚才装Anaconda3的那个“Anaconda Prompt”是不是同一个?Anaconda Prompt是Anaconda自带的专用命令行,它启动时已经自动加载了conda环境变量,基本不会出现“conda不识别”。如果你已经习惯在PowerShell里干活,务必先跑一次conda init powershell把这个通道打通。

5.2 Jupyter的PermissionError [Errno 13] Permission denied

Jupyter的权限报错也极其高频,典型场景有两个:

  • 你从开始菜单启动Jupyter,在笔记本里执行Keras或torchvision下载预训练模型、保存文件时,抛出PermissionError [Errno 13],且错误信息里经常出现C:\Program Files或C:\ProgramData路径。
  • 你之前用“以管理员身份运行”打开了Anaconda Prompt并创建了一些文件或目录,之后再用普通模式跑Jupyter,发现无法写入那些文件。

原因一句话总结就是:Jupyter进程对目标路径没有写权限,或者目标文件的所有权不属于你当前用户。

解决办法从易到难排列:第一,把项目工作目录建在用户目录下(比如C:\Users\你的用户名\projects),Jupyter里所有读写都在这个目录内进行,避开Program Files等受系统保护的区域。第二,如果你确实需要在D盘某个目录工作,检查该目录的“属性”->“安全”->“编辑”,给Users组添加“完全控制”权限。第三,如果错误来自某个文件被管理员创建导致所有权混乱,用管理员终端执行icacls命令重置权限,或者直接把该文件删掉让程序重新生成。

还有一个容易被忽略的点:启动Jupyter時不要动不动就用“以管理员身份运行”。管理员身份运行本身不会报权限错,但由它创建的文件夹、文件默认归属管理员,你之后用普通权限去操作这些目录时,反而会遭到拒绝。我见过太多人“开了管理员模式再也没关过”,最后整个工作目录只有管理员能写,普通模式一运行就报错,绕了很大一圈才发现是“起步就错了”。

5.3 torch.cuda.is_available()为False

这个问题的排查价值极高,因为几乎每位GPU版用户都栽过一次。遇到这个False,先按下面这张表逐条核验:

现象 可能原因 处理办法
torch版本正常,但cuda.is_available()为False 安装的是CPU版PyTorch 按官网GPU命令重新安装
配置了GPU命令,但conda装出来仍是CPU版 在conda环境里忘了指定pytorch-cuda conda方式安装时确保命令包含pytorch-cuda=指定版本
显卡是RTX 50系 PyTorch版本过老,不支持Blackwell架构 安装cu128及以上的PyTorch
GPU驱动版本过旧 驱动不支持当前CUDA版本 更新NVIDIA显卡驱动到较新版本
打开终端时环境没被激活 PyTorch装进了base环境,而你在pytorch环境里检查 检查命令行前缀是否有pytorch字样
电脑有核显和独显,系统设置默认用核显 个别笔记本工作负载被分配到核显上 在NVIDIA控制面板里设置Python进程使用高性能显卡

排查顺序建议是:先确认你检查CUDA时所在的环境是否和安装PyTorch时一致;再确认torch.__version__是否带cu字样(比如2.6.0+cu128就是GPU版,2.6.0+cpu就是CPU版);然后看显卡型号是否被当前PyTorch支持;最后才是考虑驱动版本。

我最想强调的一点:不要让“GPU环境”成为一个玄学问题。它本质上就是三层软件(驱动、PyTorch的CUDA运行时、显卡硬件架构)之间的版本匹配问题。每一层都有可查的版本号,一层层对比,总能定位到具体是哪里没对上。

5.4 环境装完之后的第一课:用CIFAR-10和ONNX验证环境

环境全部搞定后,不要急着学各种花哨的网络结构,先跑一个最经典的“环境体检”脚本:加载CIFAR-10数据集,做一个最简单的数据迭代,看能不能正常走通。

import torch
import torchvision
import torchvision.transforms as transforms

transform = transforms.Compose([transforms.ToTensor()])
trainset = torchvision.datasets.CIFAR10(root='./data', train=True,
                                        download=True, transform=transform)
trainloader = torch.utils.data.DataLoader(trainset, batch_size=4,
                                          shuffle=True, num_workers=0)

dataiter = iter(trainloader)
images, labels = next(dataiter)
print(images.shape, labels.shape)

能打印出类似torch.Size([4, 3, 32, 32])的结果,就说明PyTorch安装、数据下载、数据加载链路全部正常。这个验证比单纯检查torch.__version__有价值得多,它直接模拟了真实训练流程中的数据进入环节。

跑完数据流程后,可以顺手做一个ONNX导出的体检,因为“pytorch转onnx”几乎是所有PyTorch工程上线前都要面对的一步:

import torch
import torchvision

model = torchvision.models.resnet18(pretrained=False)
model.eval()
dummy_input = torch.randn(1, 3, 224, 224)

torch.onnx.export(model, dummy_input, "resnet18.onnx",
                  opset_version=13, input_names=["input"],
                  output_names=["output"])
print("ONNX export OK")

生成一个ONNX文件,说明模型导出链路也没问题。这样你就有了一个从训练侧到部署侧的完整硬件验证。

再往后,你就可以顺着自己的学习路线深入了。练手时无非几个方向:图像分类,加载CIFAR-10或MNIST训练一个简单CNN;做L2正则化,在优化器里加weight_decay=1e-4参数就是最常见的实现方式;搞强化学习,把TD3这类算法代码配着gymnasium环境跑起来;做文字识别,各种OCR模型基本也都跑在这套PyTorch环境上。环境地基打好了,上面盖什么楼都只是时间问题。

我个人在实际使用中的体会是:环境搭建这件事,最适合一次做对。不要边装边怀疑,更不要看到一篇新教程就推翻重来。Anaconda3 + PyTorch + Jupyter这套组合之所以能成为主流,恰恰是因为它每一步都有标准答案。按这篇流程走下来,你的环境应该能稳定服役很长时间,后面真正需要花心思的,永远是模型和业务本身,而不是一遍遍重装环境。

更多推荐