CentOS 7部署GaussDB全攻略:Python依赖、远程连接与内核调优
1. 项目概述为什么GaussDB在CentOS7上安装是个“技术活”如果你正在一个CentOS 7的环境里折腾GaussDB并且已经卡在了Python依赖或者远程连接配置上那这篇文章就是为你准备的。我最近刚在一个生产测试环境里完整走了一遍这个流程从系统准备、依赖解决到数据库安装、远程访问打通中间踩的坑一个不少。GaussDB作为一款企业级的数据库其安装过程远不像yum install一个软件包那么简单尤其是在一个相对“古老”但依然广泛使用的CentOS 7系统上。你会发现官方文档往往假设你的环境是“纯净”且“标准”的但现实是我们的服务器可能已经承载了其他服务或者缺少某些特定的库文件。核心的挑战通常集中在两点一是满足其复杂的运行时依赖尤其是Python3环境及其特定模块二是配置完成后如何安全、稳定地从远程客户端进行连接。这不仅仅是执行几条命令更是对系统环境理解、依赖关系梳理和网络配置能力的一次综合考验。2. 环境准备与依赖全景解析在真正运行安装程序之前花时间把地基打牢能避免后续绝大多数令人崩溃的错误。CentOS 7默认的Python版本是2.7.5而GaussDB的安装工具和部分管理功能对Python3有强制要求。这不仅仅是版本问题更涉及一系列系统库和开发工具的完整性。2.1 系统基础环境检查与优化首先我们需要确保系统处于一个良好的起点。通过SSH登录你的CentOS 7服务器执行以下检查系统版本与内核确认cat /etc/redhat-release uname -r确保你使用的是CentOS 7.6或更高版本建议7.9低版本可能存在已知的内核或库文件问题。内核版本最好在3.10.0-1062以上这对后续的一些性能优化有好处。关闭SELinux GaussDB的安装和运行可能会与SELinux的安全策略冲突尤其在涉及非标准端口和文件访问时。对于测试和内部环境临时将其设置为宽容模式是常见做法。# 查看当前状态 getenforce # 临时设置为Permissive setenforce 0 # 永久关闭需重启生效 sed -i s/^SELINUXenforcing/SELINUXdisabled/ /etc/selinux/config注意在生产环境中请根据实际安全策略评估可能需要配置详细的SELinux策略而非直接关闭。防火墙配置规划 CentOS 7默认使用firewalld。你需要提前规划好GaussDB监听的服务端口默认是5432但安装时可能指定其他端口。建议在安装前就开放相应端口避免安装后无法连接。# 假设使用默认端口5432 firewall-cmd --zonepublic --add-port5432/tcp --permanent firewall-cmd --reload # 检查端口是否开放 firewall-cmd --zonepublic --list-ports2.2 Python3环境构建超越简单的yum install这是第一个大坑。直接用yum install python3安装的版本可能过低比如Python 3.6而GaussDB的安装脚本或依赖库可能需要更高版本如3.7。更稳妥的方式是使用Software Collections (SCL) 或者编译安装。方案一使用SCL仓库安装Python 3.8推荐SCL允许你在系统中并行安装多个软件版本而不冲突。# 1. 安装SCL工具 yum install centos-release-scl -y # 2. 安装Python 3.8套件 yum install rh-python38 -y # 3. 启用Python 3.8环境 scl enable rh-python38 bash # 此时python3和pip3命令指向的就是3.8版本 python3 --version # 4. 将常用命令软链接到标准路径可选但方便 ln -sf /opt/rh/rh-python38/root/usr/bin/python3 /usr/local/bin/python3 ln -sf /opt/rh/rh-python38/root/usr/bin/pip3 /usr/local/bin/pip3方案二源码编译安装Python 3.9如果你需要更精确的控制或特定版本编译安装是最终手段。# 1. 安装编译依赖 yum groupinstall Development Tools -y yum install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel libffi-devel gdbm-devel xz-devel -y # 2. 下载源码以3.9.18为例 cd /usr/src wget https://www.python.org/ftp/python/3.9.18/Python-3.9.18.tgz tar xzf Python-3.9.18.tgz cd Python-3.9.18 # 3. 配置、编译、安装 ./configure --enable-optimizations --enable-shared make -j $(nproc) make altinstall # 使用altinstall避免覆盖系统python2 # 4. 配置共享库路径 echo /usr/local/lib /etc/ld.so.conf.d/python3.conf ldconfig # 5. 验证 /usr/local/bin/python3.9 --version实操心得我强烈推荐方案一SCL。源码编译虽然灵活但极易引入环境变量混乱问题特别是libpython共享库的路径。如果后续运行GaussDB安装脚本时出现libpython3.x.so.1.0: cannot open shared object file这类错误十有八九是库路径没被系统识别。SCL方案管理起来更干净。2.3 系统级依赖库的查漏补缺即使Python3准备好了GaussDB本体基于PostgreSQL内核和其安装工具还需要一大堆系统库。很多错误如“依赖: python3 ( 3.10.6-1~22.04) 但是 3.10.6-1~22.04.1 正要被安装”看似是Python问题实则是缺少底层开发库。 执行以下命令安装常用依赖包yum install -y bison flex readline-devel zlib-devel openssl-devel pam-devel libxml2-devel libxslt-devel openldap-devel python-devel cmake gcc gcc-c perl-ExtUtils-Embed libaio libaio-devel numactl numactl-devel关键点解析libaio和libaio-devel异步IO库对数据库性能至关重要。numactl和numactl-devel非一致性内存访问控制在多CPU服务器上优化内存分配。readline-devel提供命令行编辑功能如果你希望gsqlGaussDB客户端有命令历史、补全等功能这个必须装。openssl-devel用于SSL加密连接这是配置远程安全连接的基础。安装完成后建议重启一次服务器确保所有新的库文件和内核参数生效。3. GaussDB安装流程深度实操假设你已经从官方渠道获取了GaussDB的安装包通常是GaussDB-Kernel-V500R001C20-xxxx-64bit.tar.gz这样的格式。以下步骤基于命令行安装方式这是最可控的方法。3.1 安装包解压与目录规划不建议在根目录或临时目录直接安装。建立一个清晰的目录结构利于后期管理和维护。# 1. 创建专用目录 mkdir -p /opt/gaussdb # 2. 上传安装包至此目录并解压 cd /opt/gaussdb tar -zxvf GaussDB-Kernel-V500R001C20-xxxx-64bit.tar.gz # 3. 进入解压后的脚本目录 cd GaussDB-Kernel-V500R001C20-xxxx-64bit/script解压后目录内通常包含install.py或gs_install等安装脚本以及依赖的库文件。3.2 配置文件修改与参数解读安装前需要编辑一个配置文件通常是cluster_config.xml或通过脚本交互生成。这是安装的核心参数错误会导致安装失败或性能低下。?xml version1.0 encodingUTF-8? ROOT CLUSTER PARAM nameclusterName valuemy_gaussdb_cluster/ PARAM namenodeNames valuenode1/ PARAM namebackIp1s value192.168.1.100/ !-- 填写服务器内网IP -- PARAM namegaussdbAppPath value/opt/gaussdb/app/ PARAM namegaussdbLogPath value/opt/gaussdb/log/ PARAM namegaussdbToolPath value/opt/gaussdb/tool/ PARAM namecorePath value/opt/gaussdb/corefile/ PARAM namegaussdbPort value5432/ !-- 数据库监听端口 -- /CLUSTER DEVICELIST DEVICE snnode1 PARAM namedataNum value1/ PARAM namedataPortBase value5432/ PARAM namedataNode1 value/opt/gaussdb/data/dn/ PARAM namedataNode1_syncNum value0/ /DEVICE /DEVICELIST /ROOT关键参数避坑指南gaussdbAppPath、gaussdbLogPath、dataNode1确保这些路径所在的磁盘有足够的空间至少预留2倍于预估数据量的空间。不要使用/tmp或/home这类可能被清理或空间不足的目录。backIp1s务必填写服务器的真实内网IP地址不能是127.0.0.1或localhost否则远程绝对无法连接。可以用ip addr命令查看。gaussdbPort确保与防火墙开放的端口一致。如果端口被占用安装会失败。可用netstat -tlnp | grep 5432检查。对于单机安装dataNode1_syncNum通常设为0。3.3 执行安装与现场问题捕捉使用正确的Python3环境执行安装脚本。如果你用了SCL需要确保在该环境下运行。# 如果使用SCL的Python3.8 scl enable rh-python38 -- python3 install.py -U omm -G dbgrp -X /opt/gaussdb/cluster_config.xml # 或者如果你已经链接了python3 python3 install.py -U omm -G dbgrp -X /opt/gaussdb/cluster_config.xml参数说明-U omm指定运行数据库的操作系统用户通常创建为omm。-G dbgrp指定用户所属的组。-X指定配置文件路径。安装过程常见中断与解决错误python3: command not found原因系统PATH中没有找到python3。解决确认Python3已安装且路径正确。使用which python3或python3 --version检查。如果是SCL安装确保执行了scl enable命令或在脚本前加上scl enable rh-python38 --。错误ImportError: No module named psycopg2或类似Python模块缺失原因安装脚本依赖的Python第三方库不存在。解决用pip3安装缺失的模块。pip3 install psycopg2-binary。其他可能需要的库有paramiko、yaml等根据错误提示安装即可。错误Failed to initialize the database: could not create semaphores: No space left on device原因系统信号量semaphore数量不足这是Linux内核参数限制。解决修改内核参数立即生效并写入配置。sysctl -w kernel.sem250 32000 100 128 echo kernel.sem 250 32000 100 128 /etc/sysctl.conf sysctl -p错误insufficient memory for shared memory segment原因共享内存设置不足。解决同样调整内核参数。sysctl -w kernel.shmmax68719476736 # 64GB根据物理内存调整 sysctl -w kernel.shmall4294967296 echo kernel.shmmax 68719476736 /etc/sysctl.conf echo kernel.shmall 4294967296 /etc/sysctl.conf sysctl -p安装脚本成功运行后会输出包含数据库目录、日志路径和初始用户默认root密码的关键信息。务必截图或保存好这个输出4. 远程连接配置与安全加固安装成功只是第一步让应用或客户端能从另一台机器连上来才是价值所在。这里涉及数据库配置和网络配置两方面。4.1 数据库监听与认证配置默认情况下GaussDB只监听本地回环地址(localhost)且使用本地信任认证。需要修改两个关键文件。修改pg_hba.conf配置客户端认证规则。 文件位于数据目录下如/opt/gaussdb/data/dn/pg_hba.conf。# 切换到数据库超级用户omm su - omm # 使用gsql连接本地数据库 gsql -d postgres -p 5432 -r # 在gsql中也可以查看hba文件路径 SHOW hba_file;在pg_hba.conf文件末尾添加允许远程连接的规则。切忌使用trust这种无条件信任的方式。# TYPE DATABASE USER ADDRESS METHOD # 允许特定IP网段的所有用户使用MD5密码连接所有数据库 host all all 192.168.1.0/24 md5 # 允许任意IP的特定用户连接特定数据库生产环境推荐 host mydatabase myuser 0.0.0.0/0 md5 # 如果必须允许所有极度不推荐仅用于测试 # host all all 0.0.0.0/0 md5TYPE:host表示TCP/IP连接。ADDRESS: 客户端IP地址或网段。METHOD:md5表示需要密码加密认证trust表示无需密码。修改postgresql.conf调整监听地址。 同样在数据目录下。找到listen_addresses参数。listen_addresses localhost # 默认只监听本地 # 改为监听所有IP或指定服务器IP listen_addresses * # 监听所有网络接口 # 或者 listen_addresses 192.168.1.100,localhost4.2 重启数据库与服务验证配置修改后必须重启数据库服务使配置生效。# 以omm用户操作 su - omm # 使用GaussDB提供的工具重启实例具体命令可能因版本而异例如 gs_ctl restart -D /opt/gaussdb/data/dn # 或者使用系统服务如果安装时配置了 systemctl restart gaussdb.service重启后在数据库服务器上验证监听是否正常netstat -tlnp | grep 5432你应该能看到类似0.0.0.0:5432或192.168.1.100:5432的监听信息而不是仅127.0.0.1:5432。4.3 客户端连接测试与排错从另一台Linux客户端机器确保网络互通进行测试。# 1. 安装GaussDB客户端或兼容的PostgreSQL客户端 # 例如在另一台CentOS上安装PostgreSQL客户端 yum install postgresql -y # 2. 使用psql命令连接 psql -h 192.168.1.100 -p 5432 -U myuser -d mydatabase -W # -h: 服务器IP # -p: 端口 # -U: 用户名 # -d: 数据库名 # -W: 提示输入密码连接失败常见原因排查错误Connection refused排查服务器防火墙未开放端口。在服务器执行firewall-cmd --zonepublic --list-ports确认。或者数据库服务未启动检查gs_ctl status。错误no pg_hba.conf entry for host排查pg_hba.conf中没有匹配你客户端IP的规则。仔细检查规则中的IP网段和listen_addresses设置。修改后必须重启数据库。错误password authentication failed for user排查密码错误或用户不存在。可以用本地连接先创建用户和设置密码。-- 在服务器本地用gsql连接后执行 CREATE USER myuser WITH PASSWORD YourStrongPassword123!; CREATE DATABASE mydatabase OWNER myuser; GRANT ALL PRIVILEGES ON DATABASE mydatabase TO myuser;5. 安装后优化与日常维护要点数据库安装并连通只是开始要让其稳定高效运行还需要一些基础优化。5.1 基础性能参数调优根据服务器硬件内存、CPU、磁盘调整postgresql.conf中的关键参数。以下是一个针对8核CPU、16GB内存的虚拟机的基础优化示例# 连接与内存 max_connections 200 # 最大连接数根据应用需求调整 shared_buffers 4GB # 共享缓冲区通常设为物理内存的25% work_mem 16MB # 每个排序/哈希操作可用内存 (总内存 - shared_buffers) / (max_connections * 2) maintenance_work_mem 512MB # 维护操作如VACUUM可用内存 # 检查点与WAL日志 checkpoint_completion_target 0.9 # 检查点完成目标平滑IO wal_buffers 16MB # WAL日志缓冲区 min_wal_size 2GB max_wal_size 8GB # 查询规划 effective_cache_size 12GB # 系统可用作磁盘缓存的内存估值通常设为物理内存的50-75% random_page_cost 1.1 # 对于SSD可以降低此值如1.1修改后同样需要重启数据库服务。5.2 配置系统服务与开机自启为了避免服务器重启后需要手动启动数据库将其配置为系统服务。# 1. 创建服务文件如果安装脚本未自动创建 vi /etc/systemd/system/gaussdb.service写入以下内容路径根据你的实际安装目录调整[Unit] DescriptionGaussDB Database Server Afternetwork.target [Service] Typeforking Useromm Groupdbgrp EnvironmentPGDATA/opt/gaussdb/data/dn ExecStart/opt/gaussdb/app/bin/gs_ctl start -D ${PGDATA} -l /opt/gaussdb/log/start.log ExecStop/opt/gaussdb/app/bin/gs_ctl stop -D ${PGDATA} -m fast ExecReload/opt/gaussdb/app/bin/gs_ctl reload -D ${PGDATA} TimeoutSec300 [Install] WantedBymulti-user.target然后启用服务systemctl daemon-reload systemctl enable gaussdb.service systemctl start gaussdb.service systemctl status gaussdb.service5.3 备份与监控入门基础备份使用gs_dump进行逻辑备份。su - omm gs_dump -h localhost -p 5432 -U myuser -d mydatabase -F c -f /opt/backup/mydatabase_$(date %Y%m%d).dump简单监控定期检查日志和连接数。# 查看错误日志尾部 tail -100f /opt/gaussdb/data/dn/pg_log/postgresql-*.log # 查看当前连接数 gsql -d postgres -c SELECT count(*) FROM pg_stat_activity WHERE stateactive;整个流程走下来你会发现GaussDB在CentOS 7上的安装与其说是一个安装动作不如说是一次小型的系统调优和依赖治理工程。核心思路就是前置检查、依赖闭环、配置精准、安全收紧。把Python3环境、系统库、内核参数这些“地基”打牢后面的安装和配置就会顺利得多。遇到报错不要慌绝大多数问题都能通过错误信息在日志中找到线索按照“网络-权限-配置-依赖”的顺序进行排查基本都能解决。

相关新闻

英语简单句核心解析:主谓骨架、五大句型与实战避坑指南

英语简单句核心解析:主谓骨架、五大句型与实战避坑指南

1. 从“主谓”骨架开始:为什么这是英语学习的“第一性原理”如果你问一个英语学了十几年的人,英语句子的核心是什么,很多人可能会说“单词”或者“语法”。但在我看来,这就像问一座房子的核心是什么,回答“砖头”或“建…

2026/10/17 8:54:23 阅读更多 →
4英寸DPI LCD屏幕驱动全攻略:从硬件连接到Linux设备树配置

4英寸DPI LCD屏幕驱动全攻略:从硬件连接到Linux设备树配置

1. 项目概述:一块4英寸高分辨率显示屏的深度探索最近在折腾一个需要紧凑显示界面的嵌入式项目,手头正好有一块型号标注为“4inch DPI LCD (B)”的屏幕。光看这个型号,信息量其实不小:“4inch”指明了物理尺寸,“DPI”则…

2026/10/20 6:31:04 阅读更多 →
Midscene.js完整指南:如何用AI视觉驱动实现零代码跨平台UI自动化测试

Midscene.js完整指南:如何用AI视觉驱动实现零代码跨平台UI自动化测试

Midscene.js完整指南:如何用AI视觉驱动实现零代码跨平台UI自动化测试 【免费下载链接】midscene AI-powered, vision-driven UI automation for every platform. 项目地址: https://gitcode.com/GitHub_Trending/mid/midscene 还在为繁琐的UI测试和维护复杂的…

2026/10/16 11:40:13 阅读更多 →

最新新闻

Function Calling 422 排查:tool 消息 content 为 null 的修复全记录

Function Calling 422 排查:tool 消息 content 为 null 的修复全记录

上周我把一个 Function Calling 任务切到 deepseek-v4.1-flash,本地跑得好好的,一上远端就开始 422。第一反应是参数写错了,翻来覆去检查代码没看出问题,直到把底层 HTTP 请求体完整 dump 出来,才发现 tool 角色的 con…

2026/10/21 0:36:01 阅读更多 →
Vidu Q4 Preview深度评测:AI视频生成迈向生产力工具的关键一步

Vidu Q4 Preview深度评测:AI视频生成迈向生产力工具的关键一步

最近几个创作群里讨论最多的,绕不开Vidu Q4 Preview。做AI视频的同仁应该都有感觉,这个赛道现在卷到什么程度:几乎每隔几天就有新版本、新模型冒出来,但大多是“看起来厉害、一上手就露馅”。Vidu Q4 Preview这次放出的内容&#…

2026/10/21 0:33:56 阅读更多 →
AI在芯片设计中的黑盒困局:一次IR压降事故带来的反思

AI在芯片设计中的黑盒困局:一次IR压降事故带来的反思

芯片世界里,有一句话最近被工程师们重复得越来越多:AI赢了棋局,却讲不出思路。就在上个月,我拿着一个AI辅助完成的block级floorplan给物理设计团队,线长比上一版少了12%,拥塞图也干净得不像话。结果等IR压降…

2026/10/21 0:33:56 阅读更多 →
计算智能体入门:从状态机到Q-learning的决策实现

计算智能体入门:从状态机到Q-learning的决策实现

1. 从零理解计算智能体的核心骨架计算智能体这个概念,听起来像是学术论文里的术语,但把它拆开来看,其实就是一个能感知环境、做出决策、执行动作的软件实体。你可以把它想象成一个在迷宫里找路的小机器人,它能看到周围哪里有墙、哪…

2026/10/21 0:33:55 阅读更多 →
MoE混合专家模型:稀疏激活如何破解大模型容量与成本困局

MoE混合专家模型:稀疏激活如何破解大模型容量与成本困局

从Transformer诞生起,前馈网络(FFN)就是"又笨重又绕不开"的角色:它占了模型近三分之二的参数量,但每个token都得老老实实把所有参数过一遍。你扩大模型容量,推理成本就跟着线性往上涨&#xff0c…

2026/10/21 0:33:55 阅读更多 →
开源30B模型硬刚闭源旗舰:科研场景实测与本地部署指南

开源30B模型硬刚闭源旗舰:科研场景实测与本地部署指南

最近开源圈又热闹起来了,一个主打科研场景的30B级别开源模型,直接放话要跟两家头部闭源大模型掰手腕。我当时第一反应是“又来一个刷榜的”,但仔细看完技术报告和社区实测数据之后,觉得这波还真不是营销话术,确实有货。…

2026/10/21 0:33:55 阅读更多 →

日新闻

统一内存+量化:锐龙AI Max PRO 400如何本地跑320B大模型

统一内存+量化:锐龙AI Max PRO 400如何本地跑320B大模型

这段时间硬件圈和AI圈都在传一个事:AMD锐龙AI Max PRO 400系列把最高192GB统一内存搬进了PC形态的产品里,按宣传口径,本地跑320B参数的大家伙不再是纸面概念。我第一反应倒不是“内存真大”,而是这话背后的含金量——它把过去只能…

2026/10/21 0:00:11 阅读更多 →
AI助手深度使用体验:对话质量、长文本处理与指令遵循如何留住用户

AI助手深度使用体验:对话质量、长文本处理与指令遵循如何留住用户

1. 从“封号重开”这个行为说起:用户到底在追求什么“封号重开”这四个字,放在任何产品语境里都带着一股决绝的味道。一个账号从零开始积累使用记录、调教偏好、沉淀工作流,背后是大量的时间和精力成本。正常情况下,没有人愿意主动…

2026/10/21 0:00:11 阅读更多 →
ROS中YOLOv3工程落地:通信同步、坐标变换与性能调优

ROS中YOLOv3工程落地:通信同步、坐标变换与性能调优

1. 为什么在ROS里硬刚YOLOv3不是“炫技”,而是工程落地的必经之路我第一次在某高校机器人实验室看到那台搭载Jetson TX2的移动底盘原地打转、反复识别错垃圾桶时,就意识到:单纯跑通darknet_ros demo和真正让YOLOv3在ROS里“干活”&#xff0c…

2026/10/21 0:00:11 阅读更多 →

周新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型(GMM)的语音识别系统,很多人第一反应就是一堆数学公式,觉得门槛很高。但如果你真的在MATLAB里把它落地跑通,会发现核心其实就是三件事:把声音变成特征向量,用GMM给每个类别…

2026/10/20 10:02:13 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人,但落到具体操作上,无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程:对图像做反白、改调色板、彩色转灰度,最后把像素数据导出成txt文件。单看每一…

2026/10/20 20:43:59 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/20 2:50:50 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 10:02:08 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 9:50:17 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 9:50:45 阅读更多 →