Linux和Windows系统下:、Paddle、tensorflow、pytorch,cuda、cudnn、CPU安装教学

技术
Linux和Windows系统下:安装Anaconda、Paddle、tensorflow、pytorch,GPU[cuda、cudnn]、CPU安装教学,以及查看CPU、GPU内存使用情况

前言:最近楼主重新安装了一波框架,安装过程中遇到的问题记录下来并分享出来。

文中部分图片丢失-可参考原文链接:https://blog.csdn.net/sinat\_39620217/article/details/131675175

1.下载 Anaconda 的安装包

Anaconda安装:Anaconda是一个开源的Python发行版本,其包含了conda、Python等180多个科学包及其依赖项。使用Anaconda可以通过创建多个独立的Python环境,避免用户的Python环境安装太多不同版本依赖导致冲突。

Anaconda 是一个免费开源的 Python 和 R 语言的发行版本,用于计算科学,Anaconda 致力于简化包管理和部署。Anaconda 的包使用软件包管理系统 Conda 进行管理。Conda 是一个开源包管理系统和环境管理系统,可在 Windows、macOS 和 Linux 上运行。本文档为你介绍 Anaconda 安装方式。

1.1 Linux下载Anaconda

首先需要在官网上选择需要安装的版本。

官网地址:https://repo.anaconda.com/archive/ 如选择当前最新版本进行安装:

https://repo.anaconda.com/archive/Anaconda3-2023.07-0-Linux-x86\_64.sh

picture.image

然后下载该安装包。


        
          
下载命令  
wget  https://repo.anaconda.com/archive/Anaconda3-2023.07-0-Linux-x86_64.sh  

      
  1. 进入安装包所在目录,先对安装包进行赋权,再执行安装程序

        
          
#查看路径  
pwd  
赋权命令:  
chmod +x Anaconda3-2023.07-0-Linux-x86_64.sh  
安装命令:  
sh Anaconda3-2023.07-0-Linux-x86_64.sh  

      
  1. 出现如下画面:

picture.image

  1. 点击 Enter(回车键),出现 More,继续按 Enter,最后输入 yes 同意用户许可证就行。

picture.image

picture.image

  1. 直至出现以下画面,就安装成功了!

picture.image

1.2 Windows下载Anaconda

参考文章:https://blog.csdn.net/sinat\_39620217/article/details/115861876

  1. 第一步 下载
  • 在 Anaconda官网 选择下载Windows Python3.8 64-Bit版本。
  • 确保已经安装Visual C++ Build Tools(可以在开始菜单中找到),如未安装,请点击 下载安装。
  1. 第二步 安装

运行下载的安装包(以.exe为后辍),根据引导完成安装, 用户可自行修改安装目录(如下图)

picture.image

  1. 第三步 使用

点击Windows系统左下角的Windows图标,打开:所有程序->Anaconda3/2(64-bit)->Anaconda Prompt在命令行中执行指令即可

后续框架库包安装同linux

2.环境变量配置

2.1 linux环境变量配置

Linux上成功安装anaconda后-bash: conda: command not found

如题,出现这个问题可能是环境变量配置 有问题。

省流请看这里:执行cat ~/.bashrc命令查看.bashrc文件内容,若文件中没有export PATH="XXX/anaconda3/bin:$PATH"说明是环境变量未配置,可以继续往下看了;若文件中有此路径,请退出本文,自行校对一下路径。

  1. 打开.bashrc文件

        
          
vim ~/.bashrc  

      
  1. 在最后一行新增 anaconda 路径

        
          
export PATH="XXX/anaconda3/bin:$PATH"  

      
  1. 保存文件(按esc后输入:wq回车)并使环境变量生效[打开文件后按i进入编辑模式,按Esc退出编辑模式,shift+冒号然后输入wq 保存文件并退出]

注意:这里是anaconda的安装路径,根据自己的安装路径即可


        
          
source ~/.bashrc  

      

执行以上三步后,便可在linux上使用conda命令了!

2.2 Windows 环境变量配置

其实,以上的环境变量配置,相当于在window环境下的环境变量加上环境变量。如在window环境下安装anaconda,安装过程中会提示是否将环境变量加入到path中,如果选上该选项,便可省去很多麻烦,安装完后直接在终端使用conda命令;

picture.image

如果没有选上,是无法直接使用conda命令的,需要在系统的环境变量中加上安装路径才可以使用conda命令。自动添加的安装路径的步骤:此电脑–>属性–>高级系统设置–>环境变量–>系统变量–>Path添加anaconda的安装路径。

3.用 conda 创建虚拟环境

        
          
#1.创建指定python版本的环境  
conda create --name paddlenlp python=3.8  
#2. 激活环境  
conda activate paddlenlp  
#3.退出环境  
conda deactivate  

      
4.安装项目依赖包&深度学习框架

4.0 其他环境检查

4.0.1 确认 Python 安装路径

确认您的 conda 虚拟环境和需要安装 PaddlePaddle 的 Python 是您预期的位置,因为您计算机可能有多个 Python。进入 Anaconda 的命令行终端,输入以下指令确认 Python 位置。

输出 Python 路径的命令为:

根据您的环境,您可能需要将说明中所有命令行中的 python3 替换为具体的 Python 路径

4.0.2 检查 Python 版本

使用以下命令确认版本

4.0.3 检查系统环境

确认 Python 和 pip 是 64bit,并且处理器架构是 x86_64(或称作 x64、Intel 64、AMD64)架构。下面的第一行输出的是”64bit”,第二行输出的是”x86_64(或 x64、AMD64)” 即可:


        
          
python3 -c "import platform;print(platform.architecture()[0]);print(platform.machine())"  

      

4.1安装项目依赖包


        
          
安装项目requirement.txt文件依赖:  
pip install -r requirement.txt  
生成requirement.txt文件:  
pip freeze > requirements.txt  

      

4.2 安装Paddle&Paddlenlp

4.2.1 安装paddle

官网:https://www.paddlepaddle.org.cn/install/quick?docurl=/documentation/docs/zh/install/pip/linux-pip.html

picture.image

windows安装使用win下指令即可

根据版本进行安装 选择下面您要安装的 PaddlePaddle

4.2.1.1添加清华源(可选)

对于国内用户无法连接到 Anaconda 官方源的可以按照以下命令添加清华源:


        
          
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/  
  

      

        
          
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/  

      

        
          
conda config --set show_channel_urls yes  

      

4.2.2CUDA安装

4.2.1.2 CPU 版的 PaddlePaddle

如果您的计算机没有 NVIDIA® GPU,请安装 CPU 版的 PaddlePaddle


        
          
conda install paddlepaddle==2.4.2 --channel https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/Paddle/  

      

4.2.1.3 GPU 版的 PaddlePaddle

  • 对于 CUDA 10.2,需要搭配 cuDNN 7.6.5(多卡环境下 NCCL>=2.7),安装命令为:

        
          
conda install paddlepaddle-gpu==2.4.2 cudatoolkit=10.2 --channel https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/Paddle/  
  
  

      
  • 对于 CUDA 11.2,需要搭配 cuDNN 8.2.1(多卡环境下 NCCL>=2.7),安装命令为:

        
          
conda install paddlepaddle-gpu==2.4.2 cudatoolkit=11.2 -c https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/Paddle/ -c conda-forge  
  

      
  • 对于 CUDA 11.6,需要搭配 cuDNN 8.4.0(多卡环境下 NCCL>=2.7),安装命令为:

        
          
conda install paddlepaddle-gpu==2.4.2 cudatoolkit=11.6 -c https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/Paddle/ -c conda-forge  
  

      
  • 对于 CUDA 11.7,需要搭配 cuDNN 8.4.1(多卡环境下 NCCL>=2.7),安装命令为:

        
          
conda install paddlepaddle-gpu==2.4.2 cudatoolkit=11.7 -c https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/Paddle/ -c conda-forge  
  

      

您可参考 NVIDIA 官方文档了解 CUDA 和 CUDNN 的安装流程和配置方法,请见 CUDA,cuDNN

4.2.1.4 pip安装


        
          
pip install paddlepaddle-gpu==2.4.2.post112 -f https://www.paddlepaddle.org.cn/whl/linux/mkl/avx/stable.html  

      

4.2.1.5 CUDA Toolkit 11.2 官网下载

cuda-toolkit官网链接

picture.image 在这里插入图片描述

CUDA Toolkit 11.2 Downloads 链接

picture.image 在这里插入图片描述


        
          
wget https://developer.download.nvidia.com/compute/cuda/11.2.0/local_installers/cuda_11.2.0_460.27.04_linux.run  
sudo sh cuda_11.2.0_460.27.04_linux.run  

      

picture.image ubuntu环境下需额外注意:


        
          
┌──────────────────────────────────────────────────────────────────────────────┐  
│  End User License Agreement                                                  │  
│  --------------------------                                                  │  
│                                                                              │  
│  The CUDA Toolkit End User License Agreement applies to the                  │  
│  NVIDIA CUDA Toolkit, the NVIDIA CUDA Samples, the NVIDIA                    │  
│  Display Driver, NVIDIA Nsight tools (Visual Studio Edition),                │  
│  and the associated documentation on CUDA APIs, programming                  │  
│  model and development tools. If you do not agree with the                   │  
│  terms and conditions of the license agreement, then do not                  │  
│  download or use the software.                                               │  
│                                                                              │  
│  Last updated: Nov 2, 2020.                                                  │  
│                                                                              │  
│                                                                              │  
│  Preface                                                                     │  
│  -------                                                                     │  
│                                                                              │  
│  The Software License Agreement in Chapter 1 and the Supplement              │  
│  in Chapter 2 contain license terms and conditions that govern               │  
│  the use of NVIDIA software. By accepting this agreement, you                │  
│──────────────────────────────────────────────────────────────────────────────│  
│ Do you accept the above EULA? (accept/decline/quit):                         │  
│ accept                                                                       │  
└──────────────────────────────────────────────────────────────────────────────┘  
输入accept  
  

      

        
          
┌──────────────────────────────────────────────────────────────────────────────┐  
│ CUDA Installer                                                               │  
│ - [ ] Driver                                                                 │  
│      [ ] 460.27.04                                                           │  
│ + [X] CUDA Toolkit 11.2                                                      │  
│   [X] CUDA Samples 11.2                                                      │  
│   [X] CUDA Demo Suite 11.2                                                   │  
│   [X] CUDA Documentation 11.2                                                │  
│   Options                                                                    │  
│   Install                                                                    │  
│                                                                              │  
│                                                                              │  
│                                                                              │  
│                                                                              │  
│                                                                              │  
│                                                                              │  
│                                                                              │  
│                                                                              │  
│                                                                              │  
│                                                                              │  
│                                                                              │  
│                                                                              │  
│                                                                              │  
│ Up/Down: Move | Left/Right: Expand | 'Enter': Select | 'A': Advanced options │  
└──────────────────────────────────────────────────────────────────────────────┘  
#把默认选中的driver取消选中 然后install  
  

      

4.2.1.6 设置环境变量


        
          
 vim ~/.bashrc  
 #复制  
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/cuda-11.2/lib64  
export PATH=$PATH:/usr/local/cuda-11.2/bin  
export CUDA_HOME=$CUDA_HOME:/usr/local/cuda-11.2  
  
source ~/.bashrc  

      

安装完成:输入 nvcc -V 验证 显示


        
          
nvcc: NVIDIA (R) Cuda compiler driver  
Copyright (c) 2005-2020 NVIDIA Corporation  
Built on Mon_Nov_30_19:08:53_PST_2020  
Cuda compilation tools, release 11.2, V11.2.67  
Build cuda_11.2.r11.2/compiler.29373293_0  

      

4.2.1.7验证安装

安装完成后您可以使用 python3 进入 python 解释器,输入import paddle ,再输入 paddle.utils.run_check()


        
          
import paddle  
paddle.utils.run_check()  

      

如果出现PaddlePaddle is installed successfully!,说明您已成功安装。

picture.image

  • 报错:ImportError: libcudart.so.11.0: cannot open shared object file: No such file or directory

picture.image

解决办法

  • 简约版(省流) 在激活后执行export LD_LIBRARY_PATH="$CONDA_PREFIX/lib"将包括libcudart.so.11.0如果你想让它自动化,将此内容添加到env-prefix/etc/conda/activate.d/env_vars.sh,这将在conda activate上运行脚本并设置LD_LIBRARY_PATH

        
          
cd $CONDA_PREFIX  
mkdir -p ./etc/conda/activate.d  
touch ./etc/conda/activate.d/env_vars.sh  
  
#写入 并保存  
vim ./etc/conda/activate.d/env_vars.sh  
export LD_LIBRARY_PATH="$CONDA_PREFIX/lib"  
  

      
  • 详细版

              
                
echo $CONDA_PREFIX  
  

            

              
                
cd $CONDA_PREFIX  
mkdir -p ./etc/conda/activate.d  
mkdir -p ./etc/conda/deactivate.d  
touch ./etc/conda/activate.d/env_vars.sh  
touch ./etc/conda/deactivate.d/env_vars.sh  
  

            

              
                
export OLD_LD_LIBRARY_PATH=${LD_LIBRARY_PATH}  
export LD_LIBRARY_PATH=anaconda3/envs/your_name/lib64  
  

            

编辑deactivate.d/env_vars.sh,这样deactivate的时候,会恢复设置


              
                
export LD_LIBRARY_PATH=${OLD_LD_LIBRARY_PATH}  
unset OLD_LD_LIBRARY_PATH  
  

            

              
                
echo $CONDA_PREFIX  
  

            

可以看到已经变成了anaconda3/envs/your_name/lib64。如果这个路径下的gcc已经含有了GLIBCXX_3.4.20,那么就不再会报错了。

  1. deactivate虚拟环境,再次activate你的虚拟环境,再查看
  2. 编辑activate.d/env_vars.sh,注意换成你的名字,注意=前后不能有空格哦
  3. 去这个路径下建立这些文件夹和文件。在activate的时候,会自动运行activate.d/env_vars.sh,deactivate的时候,会自动运行deactivate.d/env_vars.sh。你可以设置任何你想设置的变量,这里我们更改LD_LIBRARY_PATH
  4. activate你的虚拟环境,查看虚拟环境路径

4.2.3 cuDNN

部分提示:Linux系统:CentOS7:sudo: apt-get:找不到命令”的解决方法

原因分析:这是由于CentOS的软件安装工具不是apt-get,而是yum,使用yum命令代替apt-get即可。

4.2.3.1 Linux下安装

picture.image 在这里插入图片描述

  • 准备文件

下载后解压:tar vxf cudnn-10.1-linux-x64-v8.0.5.39.tgz
解压后得到 cuda 的文件夹,重命名为 cudnn_8.0.5, 并拷贝到/usr/local/下:


        
          
sudo cp -r -d ./cudnn_8.0.5 usr/local/  

      

把 / usr/local/cudnn_8.0.5 中的内容复制到 /usr/local/cuda/include 中


        
          
sudo cp /usr/local/cudnn_8.0.5/include/* usr/local/cuda/include/  

      

重置读写权限


        
          
sudo chmod a+r /usr/local/cuda/include/cudnn.h  

      
  • 添加软链接环境变量

/usr/local/cudnn_8.0.5/lib64添加到环境变量 LD_LIBRARY_PATH 中


        
          
gedit ~/.bashrc  

      

在最后添加:


        
          
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/cudnn__8.0.5/lib64  

      

使环境变量生效:


        
          
source ~/.bashrc  

      

4.2.3.1 ubuntu下安装

picture.image 自行根据实际情况选择:ubuntu 20.04 、ubuntu 16.04 ubuntu 18.04 版本


        
          
#依次安装  
sudo dpkg -i libcudnn8_8.1.1.33-1+cuda11.2_amd64.deb  
sudo dpkg -i libcudnn8-dev_8.1.1.33-1+cuda11.2_amd64.deb  
sudo dpkg -i libcudnn8-samples_8.1.1.33-1+cuda11.2_amd64.deb  

      
  • 验证cuDNN可用 #官方说法:To verify that cuDNN is installed and is running properly, compile the mnistCUDNN sample located in the /usr/src/cudnn_samples_v8 directory in the debian file.

        
          
# 将cuDNN例子复制到可写路径中  
cp -r /usr/src/cudnn_samples_v8/ $HOME  
  
# 转到可写路径  
cd  ~/cudnn_samples_v8/mnistCUDNN  
  
# 编译文件。  
sudo make clean   
sudo make  
  
# 运行样例程序。  
sudo ./mnistCUDNN  

      

如果成功运行,会显示下列信息:


        
          
bai@ubuntu:~/cudnn_samples_v8/mnistCUDNN$ sudo ./mnistCUDNN  
Executing: mnistCUDNN  
cudnnGetVersion() : 8101 , CUDNN_VERSION from cudnn.h : 8101 (8.1.1)  
Host compiler version : GCC 9.3.0  
  
There are 2 CUDA capable devices on your machine :  
device 0 : sms 30  Capabilities 6.1, SmClock 1582.0 Mhz, MemSize (Mb) 12196, MemClock 5705.0 Mhz, Ecc=0, boardGroupID=0  
device 1 : sms 30  Capabilities 6.1, SmClock 1582.0 Mhz, MemSize (Mb) 12192, MemClock 5705.0 Mhz, Ecc=0, boardGroupID=1  
Using device 0  
  
Testing single precision  
Loading binary file data/conv1.bin  
Loading binary file data/conv1.bias.bin  
  
......  
  
Resulting weights from Softmax:  
0.0000000 0.0000008 0.0000000 0.0000002 0.0000000 0.9999820 0.0000154 0.0000000 0.0000012 0.0000006   
  
Result of classification: 1 3 5  
  
Test passed!  
  

      

        
          
#查看cudnn版本  
cat /usr/include/cudnn_version.h | grep CUDNN_MAJOR -A 2  
  

      

4.2.3.1 centos下安装

picture.image 在这里插入图片描述


        
          
#依次安装  
yum install libcudnn8-8.1.1.33-1.cuda11.2.x86_64.rpm  
yum install libcudnn8-devel-8.1.1.33-1.cuda11.2.x86_64.rpm  
yum install libcudnn8-samples-8.1.1.33-1.cuda11.2.x86_64.rpm  

      

即可

4.2.4 安装paddlenlp

  • 环境依赖
  • python >= 3.7
  • paddlepaddle >= 2.3
  • pip安装

        
          
#创建名为my_paddlenlp的环境,指定Python版本为3.8  
conda create -n my_paddlenlp python=3.8  
#进入my_paddlenlp环境  
conda activate my_paddlenlp  
  
#安装PaddleNLP  
  
pip install --upgrade paddlenlp>=2.0.0rc -i https://pypi.org/simple  
  
pip install --upgrade paddlenlp>=2.0.0rc -i https://pypi.tuna.tsinghua.edu.cn/simple  

      

github代码会跟随开发进度不断更新:或者可通过以下命令安装最新 develop 分支代码:


        
          
pip install --pre --upgrade paddlenlp -f https://www.paddlepaddle.org.cn/whl/paddlenlp.html  

      

按如上方式配置后,即可在环境中使用PaddleNLP了,命令行输入python回车后,import paddlenlp试试吧,之后再次使用都可以通过打开'所有程序->Anaconda3/2(64-bit)->Anaconda Prompt',再执行conda activate my_paddlenlp进入环境后,即可再次使用PaddleNLP。

问题一:相关pip问题默认镜像问题(trusted-host问题),安装设定清华源即可

进入虚拟环境,查看pip安装路径


        
          
whereis pip  
  
  
pip: /usr/bin/pip3.8 /etc/pip.conf /root/anaconda3/envs/paddlenlp/bin/pip  
  

      

        
          
#查看pip.conf,修改成清华源,:wq 保存即可  
vim /etc/pip.conf  

      

        
          
[global]  
index-url = https://pypi.tuna.tsinghua.edu.cn/simple/  
[install]  
trusted-host=pypi.tuna.tsinghua.edu.cn  
  

      

问题二:报错提示:pip install --use-pep517


        
          
pip isntall --use-pep517 -U paddlenlp  

      
  • 代码安装

        
          
git clone https://github.com/PaddlePaddle/PaddleNLP.git  
cd PaddleNLP  
git checkout develop  

      

如果遇到:github 报错 Failed to connect to github.com port 443:connection timed out、一般原因:电脑里开启了代理,例如开启了软件等,就会造成这个原因


        
          
取消全局代理:  
git config --global --unset http.proxy  
   
git config --global --unset https.proxy  

      

4.3 安装pytorch

4.3.1 GPU版本安装

方法一:

安装 pytorch 需要注意 torch 与 torchvision 的版本对应,参照以下网址对照:

https://github.com/pytorch/vision

picture.image

windows安装使用win下指令即可

从官网上找到适合自己版本的安装pytorch的指令 https://pytorch.org/get-started/locally/

  1. 创建虚拟环境,参考3.用 conda 创建虚拟环境
  2. 安装pytorch

        
          
conda install pytorch torchvision torchaudio pytorch-cuda=11.7 -c pytorch -c nvidia  

      

方法二

先在以下三个网站下载需要的安装包(根据自己的驱动选择):

  1. Index of /anaconda/cloud/pytorch/linux-64/ | 清华大学开源软件镜像站 | Tsinghua Open Source
  2. Mirror https://download.pytorch.org/whl/cu100/torch\_stable.html
  3. https://download.pytorch.org/whl/torch\_stable.html

picture.image在conda环境下安装:


        
          
conda activate pytorch1.10.0 # 进入conda环境,这个是我之前创建好的  
cd Download  
pip install torchaudio-0.8.0-cp38-cp38m-linux_x86_64.whl  
pip install torchvision-0.8.0-cp38-cp38m-linux_x86_64.whl  
pip install torchvision-0.9.0+cu111-cp38-cp38m-linux_x86_64.whl  

      

4.3.2 CPU版本安装

参考:https://blog.csdn.net/sinat\_39620217/article/details/115483807


        
          
pip install torch torchvision torchaudio  

      

4.4 安装tensorflow2.6.0-gpu(conda环境下)

根据TensorFlow 官网,我们选取CUDA11.2搭配cuDNN8.1安装,NVIDIA驱动版本尽量选460系列picture.image


        
          
conda activate tensorflow2.6.0 # 进入conda环境,这个是我之前创建好的  
pip install tensorflow-gpu==2.6.0  

      

其他加速库安装参考前面

5.Linux查看CPU、GPU内存使用

5.1 查看 CPU 内存使用情况

1、输入命令:top,显示如下


        
          
top - 17:09:22 up 12 days, 23:10, 12 users,  load average: 1.69, 1.43, 1.27  
Tasks: 885 total,   3 running, 877 sleeping,   4 stopped,   1 zombie  
%Cpu(s):  2.9 us,  0.6 sy,  0.0 ni, 95.3 id,  1.2 wa,  0.0 hi,  0.0 si,  0.0 st  
KiB Mem : 13150492+total, 11463488 free, 20194752 used, 99846680 buff/cache  
KiB Swap:  4194300 total,  4088316 free,   105984 used. 11051801+avail Mem   
  PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND                           
  65593 root      20   0  161460   6120   4368 S   1.7  0.0   2:51.34 sshd  

      

2、输入命令:htop,显示如下

picture.image 在这里插入图片描述

若没有该命令,需要先安装,ubuntu 安装命令为:


        
          
sudo apt-get install htop  

      

centos 安装命令为:


        
          
yum install htop  

      

5.2 查看 GPU 内存使用情况

1、输入命令:nvidia-smi,显示如下,该命令只能显示一次。

picture.image 在这里插入图片描述

2、实时显示
1)使用 watch 命令, 按照指定间隔刷新,例如下面命令是每隔 1s 刷新一次


        
          
watch -n 1 nvidia-smi  

      

2)watch 每个时间周期开启一个进程 (PID),查看后关闭进程,会影响 cuda 操作,建议使用 nvidia-smi -l n 或者 nvidia-smi --loop=n,这个命令执行期间一直是一个进程 PID。例如下面命令是每隔 1s 刷新一次。


        
          
nvidia-smi -l 1  

      

更多优质内容请关注公号&知乎:汀丶人工智能;会提供一些相关的资源和优质文章,免费获取阅读。

picture.image

文中部分图片 丢失 -可参考 原 文链接

https://blog.csdn.net/sinat\_39620217/article/details/131675175

书籍推荐:

0
0
0
0
评论
未登录
看完啦,登录分享一下感受吧~
暂无评论