☰
TensorFlow 2.0 GPU环境配置实战:CUDA与cuDNN版本匹配、安装排错与验证
2026/10/24 6:08:08 网站建设 项目流程

简介:一份面向TensorFlow GPU深度学习环境搭建初学者的PPT讲解资料,围绕Anaconda、CUDA与cuDNN、TensorFlow-gpu、Keras完整安装链路展开,解决从无到有配置GPU训练环境和版本匹配的常见困惑。内容按实操顺序梳理Anaconda下载安装、conda虚拟环境创建、NVIDIA显卡与CUDA 10.0适配、cuDNN文件复制与环境变量配置、tensorflow-gpu==2.0安装、Keras安装等关键命令;同时附带MNIST手写数字分类示例,覆盖卷积神经网络模型构建、编译、训练与评估流程,便于读者复现并验证GPU环境是否真正生效。资料包共1个pptx演示文稿,压缩包大小4.3MB,页面包含安装界面截图、命令行示例和验证方法,适合边看边操作,也可作为安装排错与版本对照参考。已有1673人学习下载,适合深度学习入门者、TensorFlow开发者以及需要快速搭建GPU环境的学生和研究人员。

1. 版本对应关系先讲清:TensorFlow 2.0 只认 CUDA 10.0

真正让一套 AI 训练环境装到最后跑不动的,往往不是显卡不行,也不是命令敲错,而是版本之间各走各的。就拿最常见的一套组合:NVIDIA RTX 2060 配 TensorFlow-gpu 2.0,TensorFlow 官方把依赖写得很死——CUDA 10.0、cuDNN 7.4 以上、Python 3.7。可很多人装的时候图省事,直接下载最新的 CUDA 11.x 和配套的最新 cuDNN,结果 tensorflow-gpu 2.0 一 import 就报 DLL 缺失,整套环境原地报废。这套环境往下还要接 Keras,跑分类示例才真正用得上。所以我把完整顺序拆成 Anaconda → CUDA → cuDNN → TensorFlow-gpu 2.0 → Keras,每一步都有可复现的命令和参数。适合第一次配 GPU 训练环境、被各种“找不到指定模块”折腾过的人。顺序别乱,版本别升,照着一路走完,基本能一次跑通。

2. Anaconda 安装:先建好跑 Python 3.7 的容器

2.1 下载与安装:64 位包和 D 盘路径

Anaconda 官网下载页根据操作系统选版本,Windows 用户直接选 64 位安装包。下载完双击安装,这一步真正要注意的是安装路径:我习惯把 Anaconda 装到 D 盘,后面创建虚拟环境、装 tensorflow 和 keras 一堆包,体积膨胀很快,放在系统盘容易把 C 盘塞满。安装到“Choose Install Location”那一步,把路径改成D:\Anaconda3这样不含中文和空格的目录。路径里有中文或空格,后续某些库的编译和路径解析会烦死你,这是装环境的老规矩。

后面两个选项经常有人纠结。Add Anaconda3 to my PATH environment variable 默认不勾选,Register Anaconda3 as my default Python 也可以不勾。第一个不勾意味着系统 cmd 里不能直接敲conda,需要用开始菜单里的 Anaconda Prompt;第二个不勾是避免 Anaconda 的 Python 把系统里其他项目的 Python 解释器顶掉。我一般两个都不勾,用 Anaconda Prompt 干活最干净。

安装完成后,打开开始菜单里的 Anaconda Prompt(不是 cmd),依次执行:

conda --version python --version conda list

第一行能看到 conda 版本号说明管理工具就绪,第二行确认解释器是 Anaconda 自带的 Python,第三行会刷出一大串预装包,能看到 numpy、pandas 这些就说明安装完整。这里有个小细节:如果conda --version能过但python --version显示的是系统里另一个 Python,说明 PATH 被改过,后面建环境时注意用 conda 显式指定的解释器,别被默认值带偏。

2.2 conda 命令找不到时:Anaconda Prompt 与 PATH 取舍

如果你图方便在安装时勾了 Add to PATH,cmd 里确实能直接敲 conda。但如果不小心没勾,装完发现 cmd 提示“conda 不是内部或外部命令”,别急着重装。最常见原因就是没勾 PATH,而系统 cmd 又不会自动去找 Anaconda 的目录。

我的处理方式分两种情况。一种是干脆用 Anaconda Prompt,这相当于一个把 Anaconda 相关路径都预置好的终端,后续创建环境、pip install 全在里面做,最省心。另一种是坚持用系统 cmd,那就手动把三个路径加进系统环境变量的 PATH:D:\Anaconda3、D:\Anaconda3\Scripts、D:\Anaconda3\Library\bin。加完一定要重开命令行窗口,环境变量的修改不会自动刷到已经开着的终端里。

提示:我不推荐勾 Add to PATH。Anaconda 的 Python 会把系统里其他项目的 python/pip 覆盖掉,装完 pytorch 再装 tensorflow 全往一个解释器里塞,版本冲突迟早爆发。用 Anaconda Prompt 等于给每个项目一个独立的“干净房间”。

2.3 换源加速:conda 和 pip 都配上镜像

Anaconda 默认从官方源下载,国内网络下经常卡在进度条不动。我一般先把 conda 和 pip 的源都换成国内镜像,避免后面装 tensorflow-gpu 这种大包时下载到一半失败。conda 换源,在 Anaconda Prompt 里执行:

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 --set show_channel_urls yes

这两条把镜像加进 channel 列表,show_channel_urls yes让 conda 显示包的来源。之后执行conda create时下载速度会明显变快。pip 换源更简单,直接给 install 命令带一个参数就行,比如后面装 tensorflow 时:

pip install tensorflow-gpu==2.0 -i https://pypi.tuna.tsinghua.edu.cn/simple

把-i后的地址当成“这次从哪儿下载”的临时指定就行,不用改全局配置,万一镜像出了问题,去掉参数换回官方源也方便排查。镜像只是下载通道,不影响最终装出来的包内容。还有一类情况:conda 报CondaHTTPError: HTTP 000 CONNECTION FAILED,多半是本机开了代理但 conda 没走代理,检查系统代理设置后重试即可。装 Anaconda 本身卡住的情况也有两次,一次是下载的安装包损坏,重新下;一次是安全软件拦截了写入,放行后就好了,这个看具体机器,属于玄学范畴的,重装前先留意。

3. CUDA 10.0 安装与环境变量配置:最容易埋雷的一步

3.1 版本选择:先看 TensorFlow 2.0 的脸色

很多人理解反了,以为是先装最新的 CUDA 再选 TF,实际是 TF 写死了它要的 CUDA 和 cuDNN 版本。我先把对应关系列出来,下面所有安装都按这张表走:

框架PythonCUDAcuDNN最低驱动版本
tensorflow-gpu 2.03.5~3.710.07.4+411.31

如果装了 CUDA 10.1 或 11.x,TF 2.0 运行时去找cudart64_100.dll会直接扑空。为什么选 10.0 而不是 10.1?TF 2.0 官方测试用的是 CUDA 10.0,10.1 有时能跑但不稳定,出现“Could not load dynamic library”的概率大很多。RTX 2060 是 Turing 架构,计算能力是 sm_75,CUDA 10.0 对 Turing 的支持已经成熟,性能完全够用。

下载从 Nvidia 官网的 CUDA Toolkit Archive 页面找cuda_10.0.130_411.31_win10.exe,这是 Windows 10 64 位的安装包。别从首页点 Download,首页给的是当前最新版,不是这个版本。文件名里的 411.31 是配套驱动的版本号,装完这个包,驱动最低也在 411.31,但如果你本机驱动已经更新,会有个降级问题,见下一节。

3.2 安装细节:自定义安装与驱动勾选

装之前先看一眼本机 Nvidia 驱动:

nvidia-smi

输出右上角 Driver Version 如果小于 411.31,先把驱动升级到新版本,否则后面 TF 运行时加载 CUDA 10.0 的库会失败。如果驱动版本已经很新,比如 460 以上,可以直接进入安装环节,但要小心安装包的驱动组件会把新驱动降级。

双击cuda_10.0.130_411.31_win10.exe,安装类型我建议选“自定义”。安装包自带一个 411.31 的 Display Driver 组件,本机驱动比它新时,把“Display Driver”勾掉,只保留 CUDA 其他组件,避免新驱动被降级。刚装完系统的机器驱动很老,那就全选让它装上,省得后面单独升驱动。

另外一个容易忽略的选项:Visual Studio Integration。没装 VS 的话别勾,装了 VS 但不打算在 VS 里写 CUDA 的也建议不勾,这个组件经常导致安装卡住或失败。CUDA Samples 可以勾上,后面环境变量CUDA_SDK_PATH要用到 Samples 的路径。安装目录保持默认C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.0,别改,后面 cuDNN 复制文件、配置环境变量都依赖这个标准路径。改到别的盘不是不行,但每个步骤都要跟着改,容易出错。

3.3 环境变量配置:CUDA_PATH_V10_1 的迷惑项

安装完成后打开环境变量窗口,你会看到安装程序自动生成了CUDA_PATH和CUDA_PATH_V10_1两个变量。这里有个很多人会懵的点:明明装的是 CUDA 10.0,变量名却冒出来一个 V10_1。这不是装错了,是安装包的变量模板写成了 V10_1,老版本安装器普遍有这个毛病。你需要确认CUDA_PATH的值指向的是v10.0,而不是v10.1。如果指向的是 v10.0 就不管那个 V10_1;如果不放心,把两个变量的值都指到C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.0。

然后添加CUDA_SDK_PATH,指向 Samples 目录。安装时勾选了 Samples 的话,一般在C:\ProgramData\NVIDIA Corporation\CUDA Samples\v10.0。接下来在 PATH 里追加四项:

路径作用
%CUDA_PATH%\binCUDA 运行时 DLL,TF 加载用它
%CUDA_PATH%\lib\x64编译链接时的库目录
%CUDA_SDK_PATH%\bin\win64Samples 编译工具
%CUDA_SDK_PATH%\common\bin\x64Samples 公共工具

其中bin和lib\x64是 TF 运行必需的,后面 cuDNN 的 dll 也要放进v10.0\bin,这一步漏了后面必报错。SDK 的两个路径主要是给编译示例用的,不编译可以不配,但既然要写全,就一并加上。

3.4 验证与常见坑:nvcc 是 V10.0,不是 V10.1

重开一个新的 cmd(必须重开,环境变量不会刷到已开的窗口),运行:

nvcc --version

正常输出release 10.0、V10.0.130之类。如果提示“nvcc 不是内部或外部命令”,说明%CUDA_PATH%\bin没写对,或者这个目录下根本没有nvcc.exe,回头检查安装路径。再跑一次nvidia-smi,确认驱动版本。这里有个常见误解:nvcc --version显示 10.0 只代表 toolkit 装好了,TF 运行时用的是驱动和 dll,驱动版本太老照样跑不了。

常见坑另外还有两个。一个是 rc.exe 相关报错,通常出现在编译 CUDA 代码时而不是 TF 运行,提示找不到 rc.exe 是因为没有安装 Windows SDK 或 VS,不在我们这套流程里,可以先忽略。另一个是装了新版 CUDA 想回退,控制面板里把所有带有“NVIDIA CUDA”字样的程序都卸载干净,重启后再装 10.0,否则残留的 11.x dll 会干扰 TF 加载。这个回退的坑我踩过一次,血泪经验是卸载要彻底,别只删主程序。

4. cuDNN 安装:账号下载、目录复制与 DLL 缺失排查

4.1 下载匹配版本:cuDNN 7.6.5 for CUDA 10.0

cuDNN 不是 Anaconda 那种“下一步下一步”的安装,它是一个压缩包,解压后手动复制文件。下载需要注册 NVIDIA 账号,在 cuDNN 下载页登录后会出现版本列表。关键点:这一页会同时给出 for CUDA 10.0、for CUDA 10.2、for CUDA 11.x 等多个包,必须选 “Download cuDNN v7.6.5 for CUDA 10.0”(Windows 版,文件后缀是 zip)。

为什么是 7.6.5 而不是最新版?TF 2.0 运行时要找的是cudnn64_7.dll,cuDNN 8.x 的 dll 叫cudnn64_8.dll,8.x 装上了 TF 也不认。同理,下成 for CUDA 11 的包,dll 依赖的 runtime 和 10.0 不匹配,直接报“找不到指定的模块”。版本对版本,这一步差一点都不行。下载下来的 zip 解压后你会看到一个cuda文件夹,真正的结构是cuda\bin、cuda\include、cuda\lib,剩下的事情就是把这三样东西填进 CUDA 10.0 的安装目录。

4.2 复制文件:bin/include/lib 一一对应

用管理员权限打开文件资源管理器,进入C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.0。把 cuDNN 解压目录里的内容按这张表复制:

源目录(cuDNN 解压后)目标目录(CUDA v10.0)
cuda\bin\*.dllv10.0\bin
cuda\include\cudnn.hv10.0\include
cuda\lib\x64\*.libv10.0\lib\x64

这里有三个操作细节。第一,dll 不止cudnn64_7.dll一个,bin 目录下通常还有cudnn_ops_infer64_7.dll、cudnn_ops_train64_7.dll、cudnn_cnn_infer64_7.dll等,建议把整个 bin 下的 dll 全部复制过去,别只挑一个,否则训练跑到某些操作时照样报缺失。第二,include 和 lib 分别处理,别把 .h 或 .lib 混到别的目录。第三,复制时如果提示目标已存在,选“覆盖”;万一被系统拦截“你需要权限”,就用管理员打开资源管理器再操作一次。

如果你习惯命令行操作,用管理员打开 PowerShell 执行三条复制命令也是一样的效果:

Copy-Item -Path "D:\cudnn\cuda\bin\*.dll" -Destination "C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.0\bin" -Force Copy-Item -Path "D:\cudnn\cuda\include\cudnn.h" -Destination "C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.0\include" -Force Copy-Item -Path "D:\cudnn\cuda\lib\x64\*.lib" -Destination "C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.0\lib\x64" -Force

-Force参数的意思是目标文件存在时直接覆盖,省去一个个确认。这里的D:\cudnn是示例路径,改成你实际解压的位置。复制完成后,打开v10.0\bin,确认列表里有cudnn64_7.dll和刚才那几个后缀带数字的 dll。到这一步 cuDNN 的文件就算落位了。

4.3 环境变量与常见坑:cudnn64_7.dll 缺失

如果你的 dll 都复制到了v10.0\bin,而 PATH 里已经有%CUDA_PATH%\bin(第三章配过),那 cuDNN 已经生效了,不用再单独加环境变量。有些人习惯把 cuDNN 单独放一个目录再往 PATH 里塞,也能跑,但我更推荐直接放进 CUDA 的 bin,少维护一条路径,也不容易产生版本错乱。如果按原文档说的“把解压后的三个文件复制到 CUDA 相应文件夹”后仍然报错,按这个顺序排查:

现象一:import tensorflow 报Could not load dynamic library 'cudnn64_7.dll'。原因:v10.0\bin里没有这个 dll,或 PATH 里没有v10.0\bin。解决:回 4.2 重新复制,再运行echo %CUDA_PATH%确认变量路径没指错。

现象二:报cudnn64_8.dll找不到。原因:你下载的是 cuDNN 8.x 的包。解决:把 8.x 的 dll 从 bin 里清掉,换成 7.6.5 for CUDA 10.0 的版本。

现象三:明明复制进去了,重启终端还是报错。原因:cuDNN 的 dll 加载依赖 CUDA runtime,如果 CUDA_PATH 被指到了 v10.1,或者驱动版本太老,会连坐失败。解决:确认CUDA_PATH指向 v10.0,用nvidia-smi确认驱动版本。

现象四:训练时报CUDNN_STATUS_ALLOC_FAILED。原因:显存不足或 batch size 太大。解决:先把 batch size 调小,这不是环境问题,但经常被误判为 cuDNN 没装好。这章最考验耐心的就是复制覆盖,装完多一点验证、少一点“感觉行了”,后面能省出几个小时。

5. TensorFlow-gpu 2.0 与 Keras 安装:版本、兼容与高频排查

5.1 创建 conda 虚拟环境:锁定 Python 3.7

打开 Anaconda Prompt,执行:

conda create -n tensorflow pip python=3.7

这个命令拆开看:-n tensorflow指定环境名,pip表示环境里同时带上 pip 包管理器,python=3.7把解释器版本锁死。为什么锁 3.7?tensorflow-gpu 2.0 官方支持 3.5~3.7,到 3.8 以上会因 ABI 不兼容出现各种导入错误。等它解析完依赖,会问Proceed ([y]/n)?,输入 y。

创建完执行:

conda info --envs

能看到环境列表里出现 tensorflow,带星号的是当前环境。然后激活:

activate tensorflow

Windows 下activate就是激活命令,如果你用的是新版 conda 或者 Linux 风格终端,写成conda activate tensorflow也行。激活后命令行开头会变成(tensorflow),说明已经进了虚拟环境。这里有个常见的绕路:有人不建环境,直接在 base 里 pip install tensorflow-gpu。短时间能跑,但过两个月想装另一个框架,版本冲突能把你折磨到重装。conda 环境就是给每个项目套一个隔离箱,互不干扰,这个习惯最好从一开始就建立。我第一次配的时候偷懒没建环境,后来装另一套东西时整个 base 崩掉重装了一遍,从那以后再也不在 base 里乱装大包了。

5.2 安装 tensorflow-gpu==2.0:版本写死是关键

激活 tensorflow 环境后,执行:

pip install tensorflow-gpu==2.0

下载慢就追加镜像参数:

pip install tensorflow-gpu==2.0 -i https://pypi.tuna.tsinghua.edu.cn/simple

两个参数说明:tensorflow-gpu是包名,==2.0是确切版本号,必须写死。不写版本号会装到当前最新版,那些版本要求的 CUDA 11/12 和驱动等级,跟你前面装好的 10.0 完全不匹配,一 import 就崩,等于前面白搭。装好后先看版本,不急着测 GPU:

pip show tensorflow-gpu

输出里Version: 2.0.0就行。也可以用pip list | findstr tensorflow确认当前环境里没有混进 CPU 版的 tensorflow。万一发现 CPU 版混进来了,执行pip uninstall tensorflow清掉,只保留 tensorflow-gpu。

注意:这里强调的“版本写死”适用于所有依赖 CUDA 的包。装 PyTorch 同理,先查它要哪个 CUDA,再选对应安装命令。版本对应关系是这套环境的地基,地基歪了,上面全是豆腐渣。

5.3 安装 Keras 2.3.1:与 TF 2.0 的兼容关系

继续在 tensorflow 环境里:

pip install keras==2.3.1

为什么要指定 2.3.1?TF 2.0 内部已经集成了tf.keras,并且对独立 keras 包的兼容版本有要求。2.3.1 是最后一个支持 TF 2.0 的多后端版本,之后的 keras 2.4 开始变成仅 TensorFlow 后端,再往后和 TF 2.0 的版本衔接容易出 mismatch。如果你只是想跑分类示例,直接用tf.keras最省事;如果旧代码是from keras import ...,装 2.3.1 能继续用。

安装完验证一下:

python -c "import keras; print(keras.__version__)"

能打印2.3.1就说明 Keras 通路正常。注意别在 base 环境里跑这个,要在(tensorflow)环境里。这里有个搜代码时的常见认知错位:网上大量教程写的是 TensorFlow 1.x 的用法,导入from keras import ...也要确认当前环境的 keras 是哪个版本。系统里如果之前单独装过 Keras 到其他环境,import 时可能导入到旧版本,所以每次操作前先确认命令行开头是(tensorflow)。

5.4 高频报错排查:DLL、Session、CPU 版

这一节收集我反复在装机现场看到的问题,按“现象→原因→解决”写,你遇到时直接对号入座。

现象 1:import tensorflow报ImportError: DLL load failed: 找不到指定的模块。原因:99% 是 CUDA 或 cuDNN 的 dll 不在加载路径里,或版本不对。解决:按顺序检查三条——%CUDA_PATH%是否指向 v10.0;v10.0\bin里有没有cudart64_100.dll;v10.0\bin里有没有cudnn64_7.dll。三条都通过再重开终端。

现象 2:Could not load dynamic library 'cusolver64_10.dll'; dlerror: cusolver64_10.dll not found。原因:驱动版本低于 411.31 时,CUDA 10.0 的部分 runtime 库加载失败。解决:nvidia-smi看驱动,低于 411.31 就升级驱动。

现象 3:AttributeError: module 'tensorflow' has no attribute 'Session'。原因:你在照 TensorFlow 1.x 的测试代码跑,tf.Session()在 2.0 里已经被移除。解决:改用第 6 章的验证代码;如果旧代码必须跑,用tf.compat.v1.Session()兼容。原文档里那段sess = tf.Session()的测试代码是从 1.x 抄的,在 2.0 下直接跑必报这个错,这是最容易翻车的地方。

现象 4:装完 import 正常,但模型训练特别慢,nvidia-smi里 GPU 占用 0%。原因:大概率装成了 CPU 版 tensorflow,或 GPU 设备没被识别。解决:pip list检查版本;用第 6 章的设备列表命令确认 GPU 是否可见。

现象 5:keras导入报AttributeError。原因:独立 keras 版本过新,和 TF 2.0 不兼容。解决:卸载 keras,重装 2.3.1;或者干脆全部使用tf.keras。

6. 装完怎么验证:GPU 真的在干活才叫成功

6.1 探活:is_gpu_available 与设备列表

激活 tensorflow 环境,进入 Python 交互模式,依次执行:

import tensorflow as tf print(tf.__version__) print(tf.test.is_gpu_available()) print(tf.config.list_physical_devices('GPU'))

第一行打印版本号,确认是 2.0.0;第二行返回True表示 GPU 可用;第三行打印物理设备列表,能看到类似[PhysicalDevice(name='/physical_device:GPU:0', device_type='GPU')]才算真正识别到了显卡。is_gpu_available()在 2.0 里还能用,后面的版本会废弃,但我在 2.0 环境里一贯用它确认,简单直接。如果这里返回False或空列表,回到第 5.4 节的现象 1 和现象 4 排查。

6.2 算力验证:矩阵乘法配合 nvidia-smi

探活通过不代表计算真的走了 GPU,我习惯再跑一段矩阵乘法,同时开另一个窗口盯着显卡占用:

with tf.device('/GPU:0'): a = tf.constant([[1.0, 2.0], [3.0, 4.0]]) b = tf.constant([[2.0, 0.0], [0.0, 2.0]]) result = a @ b print(result.numpy())

输出应该是[[ 2. 4.] [ 6. 8.]]。tf.device('/GPU:0')把张量运算明确放到第一块 GPU 上,@是矩阵乘法。在另一个窗口运行:

nvidia-smi -l 1

-l 1表示每秒刷新一次。执行上面那段 Python 时,如果 GPU 利用率从 0% 跳起来,说明计算真的吃到了显卡,而不是只在 CPU 上跑了张量模拟。

6.3 Keras 分类示例:跑通一次完整的 fit

最后用 Keras 内置的 MNIST 数据集跑一个最简单的分类模型,这一步能把 Anaconda、CUDA、cuDNN、TensorFlow、Keras 整条链路全部串起来:

import tensorflow as tf from tensorflow.keras import layers (x_train, y_train), (x_test, y_test) = tf.keras.datasets.mnist.load_data() model = tf.keras.Sequential([ layers.Flatten(input_shape=(28, 28)), layers.Dense(128, activation='relu'), layers.Dense(10, activation='softmax') ]) model.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy']) model.fit(x_train, y_train, epochs=2, batch_size=64, validation_data=(x_test, y_test))

load_data()会自动下载 MNIST 数据集到本地缓存;Dense(128)是 128 个神经元的全连接层;sparse_categorical_crossentropy适合整数标签;epochs=2只跑两轮,目的是验证能正常训练,不用追求精度。跑起来后同时看nvidia-smi,确认显存有占用。能正常跑出 loss 下降,这套 Anaconda + CUDA 10.0 + cuDNN 7.6 + tensorflow-gpu 2.0 + Keras 2.3.1 的环境就算正式验证通过。

从那以后我每次装完这套环境,都会强制走一遍“探活 → 算力 → fit”这三个检查,十分钟确认全链路通,不给自己留“感觉应该没问题”的侥幸。这套安装步骤我整理成了 PPT,顺序就是今天这篇的顺序,照着过一遍能少踩不少坑。希望帮到你。

本文还有配套的精品资源,点击获取

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询