news 2026/9/18 16:06:30

Windows上部署gsplat:从环境配置到跑通3D高斯泼溅全指南

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Windows上部署gsplat:从环境配置到跑通3D高斯泼溅全指南

gsplat这个词,玩3D重建和神经渲染的人应该不陌生。它是3D Gaussian Splatting(3D高斯泼溅)最主流的CUDA实现库,用一句话概括:给你一组围绕某个场景拍摄的照片,它能重建出一个可以实时渲染的3D模型,速度比传统NeRF快一个量级。官方生态里Linux环境基本开箱即用,但到了Windows本地部署这一步,网上能搜到的完整教程不算多,踩坑的人倒是不少。

这篇文章就讲我在Windows上把gsplat从零跑通的全过程,包括环境怎么准备、编译怎么过、踩过哪些坑、最后怎么验证它能真正干活。适合三类人:想在Windows工作站上做3DGS实验的研究生、做三维重建落地的工程师、还有想本地体验神经渲染但不想碰Linux的玩家。我不会去复述官方文档,只讲实际部署中真正卡人的细节。

我建议你把这篇文章当作一条完整的操作路径,先从第一章了解自己要装的东西,再逐步照着第二章到第四章执行。每个步骤我都标注了"我为什么会这么选",这样即使版本更新、命令变了,你也有能力自己调整。

1. gsplat是什么:先搞懂你手上要装的东西

1.1 从NeRF到3DGS:这个库到底解决了什么问题

3D Gaussian Splatting是2023年火起来的场景表示方法。它不像NeRF那样用神经网络去隐式拟合一个场,而是直接用成千上万个3D高斯分布来表示场景。每一个高斯都有自己的一组参数:中心位置、协方差(由缩放和旋转得到)、不透明度、颜色。训练时优化这些参数,渲染时把高斯投影到2D图像平面上,按深度排序后做alpha blending,一帧画面就出来了。

gsplat就是这套流程的CUDA实现库,由nerfstudio团队维护,底层是C++和CUDA,对外提供Python API。它火起来的原因非常实在:NeRF渲染一张高分辨率图可能要几十毫秒到几百毫秒,3DGS在消费级显卡上能跑到实时帧率;训练时间也从原来的小时级缩短到分钟级。配合nerfstudio生态,从拍摄到出成果的链路变得非常短。

我在实际使用中最直观的感受是:同一组数据,用gsplat训练30000步出来的效果,已经能接近甚至超过很多NeRF方法训10万步的结果。这也是为什么这个库在三维重建、自动驾驶仿真、数字人等领域迅速铺开。理解这一点,你就知道部署gsplat不是在装一个普通的Python包,而是在给整个3DGS训练管线搭台子。

1.2 为什么Linux顺滑,Windows却要折腾一圈

gsplat的官方CI和预编译产物主要面向Linux,Windows的预编译wheel经常缺失或滞后。原因在于库内含大量自定义CUDA算子,安装时需要用nvcc把C++/CUDA源码编译成当前显卡能跑的机器码。Windows下的工具链比Linux要复杂:编译器要用MSVC,CUDA路径要配环境变量,PyTorch的CUDA绑定版本还要和nvcc对得上,任何一个环节出了偏差就会编译失败。

从个人经验看,Windows部署gsplat的典型失败场景,十次里有八次出在环境依赖上,而不是库本身。比如找不到cl.exe、nvcc不在PATH里、PyTorch装了CPU版本、CUDA_HOME没有配置,这些问题和gsplat代码本身没关系,但足以把一个下午耗光。

那为什么还要在Windows本地部署?我的理由是:第一,不用装双系统或开虚拟机,直接在熟悉的系统里干活;第二,很多同学的主力机就是Windows加一块NVIDIA显卡,本地能跑通了迭代效率高很多;第三,gsplat的训练和渲染在单卡Windows环境下完全够用,不必什么实验都往服务器上丢。看清楚这一点,你就明白折腾环境是值得的。

1.3 部署前先理清依赖链:从Python到CUDA再到编译器

安装gsplat不是一个孤立的pip install,它依赖一整条链,我习惯把它记为几个环节:

  • Python解释器(3.10或3.11)
  • CUDA Toolkit(用于nvcc编译)
  • Visual Studio C++ Build Tools(提供MSVC编译器)
  • PyTorch(必须带正确的CUDA运行时)
  • 最后才是gsplat本身

这条链的每一环都有版本匹配问题。PyTorch编译时用到的CUDA版本、gsplat源码编译时用到的nvcc版本、以及运行时显卡驱动支持的CUDA版本,三者之间不完全一致也会出问题。因此第一章末尾我先给你一个操作原则:所有组件尽量选"当前主流稳定版本",不要追新。我在部署时用的组合是Python 3.10 + CUDA 12.1 + PyTorch 2.1(cu121)+ MSVC v143,这个组合在官方的兼容矩阵里都有对应支持,踩坑概率最小。

2. 环境准备:把四块地基一块块砸实

2.1 先看硬件和驱动:别急着敲命令

开始之前,先在终端里执行nvidia-smi看一下显卡信息。重点看右上角的Driver Version和CUDA Version。这里有个经典误区:nvidia-smi显示的CUDA Version不是你已经装了CUDA Toolkit,而是驱动最高支持的CUDA版本。比如它显示CUDA Version: 12.2,意思是你最多能装12.2及以下的Toolkit,并不代表已经装好了。

我建议先用GPU-Z或者任务管理器确认显卡型号和显存。显存大小直接决定你能处理的数据规模,8GB显存跑30张图的场景问题不大,跑100张以上的高分辨率图就会紧张。驱动最好保持在较新版本,NVIDIA官方每个月都有更新,如果驱动太老,CUDA 12.x直接不支持。

确认完硬件之后,还要看一眼Windows系统的版本。Win10 21H2以上、Win11都可以,太老的Win10版本在装Build Tools和CUDA时可能出现兼容性报错。如果条件允许,我建议把系统更新到最新再开始,能省掉不少莫名其妙的麻烦。

2.2 Miniconda隔离环境:Python版本怎么选才不出岔子

我强烈建议用Miniconda来管理环境,而不是直接用系统Python。原因很实际:gsplat依赖的PyTorch、numpy、opencv等包版本比较敏感,conda能为每个项目隔离出独立的Python环境,切换项目不打架。Miniconda装完之后,打开Anaconda Prompt,执行:

conda create -n gsplat python=3.10 -y conda activate gsplat

Python版本选择上,3.10是我的首选。3.8和3.9对某些较新版本的PyTorch和gsplat支持不完整,3.12虽然能用,但不少依赖包(尤其是torchvision和opencv)在3.12上的wheel更新滞后,容易出现装不上的情况。选择3.10,你会在后面的安装中少踩至少一半的坑。

环境建好之后,顺手把pip升级到最新版,python -m pip install --upgrade pip。这一步很多人忽略,但旧版pip在解析带--index-url的安装源时表现不稳定,升级能规避一些莫名其妙的下载错误。另外,整个安装过程中所有命令都在conda激活后的终端里执行,不要换终端窗口,不然环境变量容易丢失。

2.3 CUDA Toolkit安装:版本匹配才是关键

gsplat编译必须要CUDA Toolkit,因为它要用nvcc来编译CUDA算子。去NVIDIA官网下载对应版本的Toolkit安装包,我这里选的是CUDA 12.1.1。下载安装时注意几个地方:安装类型选自定义,不要选精简;组件里建议不要勾选Visual Studio Integration(除非你后面还要用VS开发CUDA程序),其他的默认保留即可。

安装路径建议保持默认:C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v12.1。装完后CUDA不一定自动加入PATH,你需要手动配置环境变量。在系统环境变量里新增:

  • CUDA_HOME=C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v12.1
  • Path里追加%CUDA_HOME%\bin%CUDA_HOME%\libnvvp

之后重新打开终端,执行nvcc -V,如果能看到Cuda compilation tools的版本信息,说明CUDA Toolkit就位了。这里再提醒一次:nvidia-smi显示的CUDA版本和nvcc -V显示的版本不是一回事,前者看驱动支持,后者看实际安装的Toolkit,两个都要确认。

2.4 Visual Studio Build Tools:百分之八十失败的根源所在

这是Windows部署gsplat最容易翻车的一环。gsplat的C++代码用MSVC编译,编译器由Visual Studio Build Tools提供,注意它不是MinGW,也不是Miniconda里自带的什么编译器。去Visual Studio官网下载Build Tools安装器,在"工作负载"里勾选"使用C++的桌面开发",右边详细信息里确认包含"MSVC v143 - VS 2022 C++ x64/x86生成工具"和"Windows 11 SDK"。

装这个组件比较耗时,大概要下载2到4GB,取决于你勾选的选项。装完后不需要安装完整的Visual Studio IDE,Build Tools已经够用。很多人在这里犯的错误是:装了社区版VS但没选C++工作负载,或者装了Build Tools但忘记勾选Windows SDK,结果编译时找不到windows.h

验证是否装好:在开始菜单找到"x64 Native Tools Command Prompt for VS 2022",打开后执行cl,能看到编译器版本信息就说明MSVC可用。注意,普通终端里是没有cl.exe的,你需要么在VS的命令行里操作,么把MSVC路径手动加到PATH,但更简单的做法是:后续所有编译操作都在这个VS命令行里先conda activate gsplat,再执行编译命令。

2.5 PyTorch安装:CPU版本是隐形大坑

PyTorch的安装是另一个高发问题点。很多人直接pip install torch,结果装到的是CPU版本,运行gsplat时直接报CUDA不可用。正确做法是去PyTorch官网用对应的index-url安装:

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

这里cu121代表CUDA 12.1版本。装完后在Python里验证:

import torch print(torch.__version__) print(torch.cuda.is_available()) print(torch.version.cuda)

如果torch.cuda.is_available()返回True,说明PyTorch的CUDA绑定已经正常工作。这一步务必确认后再继续,否则后面gsplat编译出来也会因为CUDA版本不一致而出各种怪问题。我在第一次装的时候就是忽略了这一点,结果编译本身成功了,但一跑train.py就报CUDA error,白白排查了半天。

3. 安装gsplat:一条快速路,一条源码路

3.1 快速路线:pip直装能成最好

环境准备齐全后,第一步尝试最省事的方式:

pip install gsplat

如果你的Python版本、CUDA版本恰好和pypi上的预编译wheel匹配,这一步直接完成,几分钟后就能import。但坦白讲,在Windows上能走到这步的概率并不高,gsplat的官方wheel主要覆盖Linux,Windows上的wheel要么缺失、要么版本落后。如果pip直接拉到了source tarball开始编译,那你前面搭的编译链就派上用场了,它会自动调用nvcc和cl.exe。

如果pip install时下载很慢或者一直卡住,可以加国内镜像源,比如-i https://pypi.tuna.tsinghua.edu.cn/simple。但注意:镜像源镜像的是pypi上的包,不会影响PyTorch那个自定义源。如果pip安装过程中报错,不要慌,直接跳到下面的源码路线,很多环境问题在源码编译时暴露得更清晰。

3.2 源码路线:自己编译的几种好处

我推荐直接走源码编译路线,不是因为它更简单,而是它更可控、也更容易排查问题。把仓库克隆到本地:

git clone https://github.com/nerfstudio-project/gsplat.git cd gsplat pip install -e .

pip install -e .实际上做了几件事:先检测环境里的CUDA路径,然后调用setuptools执行setup.py,其中会编译大量CUDA算子,最后把编译好的扩展安装成可编辑包。所谓"可编辑",意思是你改了源码里的Python文件,不用重新安装就能生效,这对后面调试和学习源码非常有帮助。

首次编译会花不少时间。我实测在i5-12400 + RTX 3060的机器上,完整编译大约需要10到15分钟,期间看到一堆nvcc -O3开头的编译命令滚屏幕,这是正常的。如果编译中途报错,先记录错误类型,下面第四章我会整理最常见的几类。整个编译过程结束后,看到类似"Successfully installed gsplat"的提示就成功了。

3.3 安装成功不等于能用:先跑通一个验证脚本

很多人在这一步急于去跑训练Demo,我建议先花两分钟跑一个最简化的光栅化验证脚本,确认核心算子是通的。脚本如下:

import torch import gsplat dev = "cuda:0" # 生成100个随机的高斯球 N = 100 means = torch.rand(N, 3, device=dev) * 2.0 - 1.0 scales = torch.rand(N, 3, device=dev) * 0.1 quats = torch.randn(N, 4, device=dev) quats = quats / quats.norm(dim=-1, keepdim=True) opacities = torch.rand(N, device=dev) colors = torch.rand(N, 3, device=dev) # 一个简单的透视相机 viewmats = torch.eye(4, device=dev).unsqueeze(0) Ks = torch.tensor([[[100.0, 0.0, 50.0], [0.0, 100.0, 50.0], [0.0, 0.0, 1.0]]], device=dev) renders, alphas, meta = gsplat.rasterization( means=means, scales=scales, quats=quats, opacities=opacities, colors=colors, viewmats=viewmats, Ks=Ks, width=100, height=100, ) print("渲染输出shape:", renders.shape) print("alpha shape:", alphas.shape)

如果输出类似于renders.shape: torch.Size([1, 100, 100, 3]),说明gsplat的CUDA光栅化算子已经能跑通,部署算是成功了。这里要注意:不同gsplat版本的函数参数名可能有细微变化,比如旧版本用viewmat而新版本用viewmats,如果报TypeError,用python -c "import gsplat; help(gsplat.rasterization)"查一下当前版本的签名就行。

3.4 用真实图片跑一次完整重建流程

验证算子是第一步,真正有意义的是跑通一个完整的3DGS训练流程。官方仓库的examples目录下提供了train.py,你可以用手机绕着一个物体(比如一个毛绒玩具、一个石膏摆件)拍30到50张照片,导出到一个文件夹里。

数据集预处理是关键:3DGS需要知道每张照片的相机位置和内外参,通常用COLMAP来估计。Windows下安装COLMAP最简单的方式是直接从GitHub的Release页下载exe安装包。安装后,在数据集目录下跑特征提取和匹配,会生成sparse/0/文件夹。如果你嫌COLMAP命令行麻烦,可以先用官方示例里自带的datasets/下的预处理数据跑通,后面再尝试自己的数据。

训练命令:

python examples/train.py --data path/to/your/dataset --steps 30000

训练过程中终端会打印loss和PSNR指标。我第一次跑的时候用的是一组35张照片的毛绒玩具数据集,在RTX 3060上约30分钟完成30000步,最终渲染出的新视角视频效果相当惊艳。这里再给一个实用建议:训练时的--data_factor 2参数可以先用起来,它会先把图片降分辨率,训练速度提升明显,适合环境验证阶段用。

4. 踩坑实录:这些问题我基本都遇到过

4.1 error: Microsoft Visual C++ 14.0 is required

这个报错属于"教科书级"错误了。出现原因很简单:编译环境里找不到MSVC编译器。排除思路如下:先确认Build Tools装没装,装了的话确认安装时勾选了"使用C++的桌面开发",然后确认你是在VS的命令行终端(x64 Native Tools Command Prompt)里执行安装命令。

如果Build Tools装好了还是报这个错,多半是conda环境的PATH覆盖了系统Path。在终端里执行where cl,如果找不到cl.exe,就去Build Tools的安装目录手动确认一下,常见路径是C:\Program Files (x86)\Microsoft Visual Studio\2022\BuildTools\VC\Tools\MSVC\版本号\bin\Hostx64\x64。把这个路径临时加进当前终端的PATH里再进行编译,报错就会消失。

4.2 nvcc身份谜团:找不到CUDA编译器

另一种高频报错是nvcc: 未找到命令或者CUDA_HOME is not set。这种情况大多不是CUDA没装,而是环境变量没生效。在终端里设置:

set CUDA_HOME=C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v12.1 set PATH=%CUDA_HOME%\bin;%PATH%

然后用nvcc -V验证。确认能输出版本信息后再重新执行pip install -e .。这里要注意:每次新开终端都可能会丢失手动set的变量,所以我建议直接把这个设到用户环境变量里,一劳永逸。另外,在cmd里设置环境变量用set,在PowerShell里要用$env:CUDA_HOME="...",别搞混了。

4.3 PyTorch和CUDA版本不对齐:训练时炸出CUDA error

编译成功后,运行时却报CUDA error: invalid device function或者no kernel image is available for execution on the device。这个错误几乎可以锁定为PyTorch的CUDA版本和gsplat编译时用的CUDA版本不一致,或者显卡算力不在编译目标里。

处理方法分两步:第一步,确认PyTorch版本里自带的是哪个CUDA,运行torch.version.cuda;第二步,确认gsplat编译时用的nvcc版本,运行nvcc -V。两者应该一致。如果PyTorch是cpu版本,卸载重装对应cu121版本。第二个处理方法是检查显卡算力,比如RTX 3060是compute_86,RTX 4090是compute_89,如果设置了TORCH_CUDA_ARCH_LIST环境变量,要确保里面包含你的显卡算力值,或者干脆删掉这个环境变量让库自动检测。

4.4 LNK1104: cannot open file 'python310.lib'

源码编译时遇到LNK1104是典型的链接器找不到Python库。常见原因是conda环境路径包含中文或空格,导致编译器在解析lib路径时出错。解决方法:第一,装Miniconda时选择纯英文路径,比如D:\miniconda;第二,环境名也用纯英文。如果路径没问题还报错,手动把Python的lib目录加进LIB环境变量:

set LIB=D:\miniconda\envs\gsplat\libs;%LIB%

不同的Python版本对应的lib文件名不同,3.10就找python310.lib,3.11找python311.lib。用where python确认当前环境下Python的安装位置,再根据实际路径调整上面的命令。

4.5 import gsplat后的各种运行时怪问题

有一个现象是:编译安装成功了,import gsplat也不报错,但调用gsplat.rasterization时报AttributeError: module 'gsplat' has no attribute ...。这种多半是包版本和API不匹配。旧版本gsplat的调用方式和现在差异不小,比如旧版用gsplat.rasterization但参数可能叫viewmat不是viewmats,新版可能还加了rasterization的额外参数如near_planefar_plane

如果源码编译时某个算子编译失败,但setup.py没有正确报错退出,最终生成的包可能不完整。这种情况重新执行一次干净编译,并加--no-cache-dir参数:

pip install -e . --no-cache-dir

编译过程中留意最后的日志里有没有error关键字。理论上setuptools只要发现编译错误就会退出,但Windows上偶尔会有子进程闪退不报错的情况,干净重编是有效的排查手段。

4.6 高频问题速查表

问题现象最可能原因解决动作
pip install gsplat 下载很慢网络问题加清华源-i https://pypi.tuna.tsinghua.edu.cn/simple
编译时找不到cl.exeMSVC未安装或未生效安装Build Tools,用VS终端操作
nvcc不是内部或外部命令CUDA环境变量未配置设置CUDA_HOME并把%CUDA_HOME%\bin加入PATH
torch.cuda.is_available()返回False装了CPU版PyTorch卸载后重新用cu121源安装
训练时报CUDA errorPyTorch/CUDA/显卡算力不匹配统一版本,检查TORCH_CUDA_ARCH_LIST
LNK1104: cannot open python310.lib路径含中文/空格或Python库路径丢失用纯英文路径,手动设置LIB
import后找不到rasterization属性API版本不一致或编译不完整查函数签名,干净重编译
训练时显存不足数据分辨率太高或图像太多--data_factor 2降采样,减小批次

5. 跑起来之后:实测数据与参数调节参考

5.1 几台不同显卡的实测训练耗时

部署成功只是开始,接下来你可能关心的是:我的显卡跑这个库到底要多久?这里给出我自己的几组实测数据,全部来自Windows环境,gsplat版本1.4.0,数据是同一组42张图的室内场景,图像分辨率约1600×1200:

显卡显存迭代步数训练耗时备注
RTX 306012GB20000约35分钟分辨率降到800×600时约15分钟
RTX 4070 Laptop8GB20000约25分钟显存紧张,需要data_factor=2
RTX 409024GB30000约18分钟全分辨率无压力

这里有个经验:图像分辨率对训练时间的影响不是线性的。分辨率每翻一倍,高斯投影的像素填充量可能变成三到四倍,耗时也跟着暴涨。所以当你只是想验证一个想法时,先用低分辨率跑通流程,再上全分辨率出最终效果。

5.2 影响训练效果和速度的关键参数

  • --iterations/--steps:官方常用30000步,但如果你只是快速确认效果,10000步也能看出大趋势。步数太多后期loss基本不再下降,纯属烧时间。
  • --data_factor:1、2、4三档,表示图像降采样倍数。显存小的机器建议直接上2,速度能快一倍以上,画质损失在可接受范围内。
  • --sh_degree:球谐阶数,默认3。值越大颜色表现越细腻,但训练和渲染都更慢,不是所有场景都需要高阶梯。
  • --density_reg:密度正则化权重,控制点云的稀疏程度。如果你的重建结果出现大量漂浮物(floaters),适当调大这个值能明显改善。

调参时的基本原则是:一次只动一个变量。很多新手喜欢同时改好几个参数,一旦效果变差根本不知道是哪个参数引起的。我先改data_factor观察速度和显存变化,再调steps观察质量曲线,每一步都记录,最终形成一个可复现的配置。

最后分享一点我个人的体会。gsplat在这个部署上,卡住人的地方从来不是gsplat本身,而是依赖链上任何一环的不对齐:编译器、CUDA、PyTorch、Python版本,哪个歪了都白搭。我第一次装的时候,就栽在Visual Studio Build Tools只装了IDE没装C++工作负载上,硬生生花了一个下午才排查出来。后来把流程梳理成标准步骤后,在另一台新机器上只花40分钟就完成了从零部署。

如果看完这篇文章你依旧遇到问题,我建议先退回第二章重来一遍,把环境变量、编译器、CUDA版本这三个点重新检查一遍,90%的问题都出在这三个点上。后续想深挖的话,推荐把gsplat源码里的CUDA kernel读一遍,看看作者是怎么优化光栅化的内存访问和并行调度,这比只会跑demo有意思多了。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/18 15:49:29

基于BosonNetSim的VLAN与路由协议配置:从单臂路由到RIP调试

简介:基于BosonNetSim的虚拟局域网与路由协议配置实验报告文档,适合网络工程相关专业的学生与网络技术初学者,用于在模拟器中练习VLAN划分、Trunk链路及路由协议配置。文档完整记录了从拓扑绘制、主机IP设置到交换机VLAN创建、接口划分、Trun…

作者头像 李华
网站建设 2026/9/18 15:49:05

Linux符号剥离与调试信息管理:strip、eu-strip、objcopy实战指南

1. 为什么要做符号剥离,剥离前先想清楚这两件事干过发布流程的人都知道,每次出包前都要纠结一件事:bin文件动不动几十兆上百兆,里面一大半都是调试信息和符号表,客户要的是能跑起来的程序,不是让你把源码结…

作者头像 李华
网站建设 2026/9/18 15:54:21

VT-x/SVM虚拟化设置全攻略:从BIOS到系统验证一文搞定

打开虚拟机、跑安卓模拟器、用 WSL 2 的时候突然弹出一句“请先开启 VT-x / SVM”,多半人第一反应是懵的。翻遍 BIOS 找不到设置项,或者找到却又开不了,这种尴尬我见过太多次了。所谓的“虚拟化设置”,前提是 CPU 得支持硬件虚拟化…

作者头像 李华
网站建设 2026/9/18 13:09:37

银河麒麟v10磁盘卸载、LVM删除与配置文件清理实战

1. 需求整体拆解与方案选型思路机房搬迁、存储扩容、业务下线、盘阵退役,这几年碰到的磁盘回收需求五花八门,但核心动作高度一致:把一块或者几块已经不需要的磁盘从银河麒麟v10服务器上干干净净地摘下来,既要不影响线上业务&#…

作者头像 李华
网站建设 2026/9/18 15:56:06

VirtualBox 运行 Ubuntu 卡顿提速:分层优化配置与排查实践

虚拟机跑 Ubuntu 卡顿这件事,几乎每个用 VirtualBox 的人都撞过:鼠标一动一顿、窗口拖动像在拉橡皮筋、终端敲命令要等半秒才回显。我前后在三台机器上折腾过 VirtualBox 里的 Ubuntu,从最初的"能跑就行"到后来把开机时间从两分半压…

作者头像 李华