☰
银河麒麟离线安装QGis:依赖解析与本地源实战
2026/10/8 3:28:07 网站建设 项目流程

简介:本资源面向在银河麒麟操作系统上开展地理信息工作的科研人员、工程师及运维人员,提供QGis 3.10.4的完整离线安装包,解决国产化环境下无网络连接时软件部署困难的问题。压缩包共95个文件,以89个deb安装包为主,涵盖QGis主程序、GDAL、Python3依赖库及Qt5组件,另含2个sh安装脚本、1个txt离线安装说明、1个sig校验文件、1个log日志和1个gz压缩包,整体约358.59MB。资源已获1242人学习下载,说明其在国产系统GIS部署场景中具有较高参考价值。读者可借助安装说明与脚本完成依赖校验、包安装及功能验证,并针对飞腾等国产CPU架构进行适配,快速搭建安全可靠的地理信息数据处理平台,适用于环境监测、城市规划等领域的科研与生产活动。

1. 银河麒麟离线装 QGis:内网机器上那套能跑通的笨办法

银河麒麟系统离线安装 QGis 包,这件事的难点从来不在 QGis 本身,而在于「离线」两个字。我见过太多人在内网机器上折腾一下午,最后卡在libQt5Core.so.5: cannot open shared object file这种报错上,然后开始怀疑人生。银河麒麟 V10 系列基于 RPM 体系,桌面版和服务器版的依赖树差异不小,而 QGis 又是一个依赖 Qt5、GDAL、PROJ、GEOS、SQLite 等一大堆库的 GIS 桌面软件,离线环境下缺一个包就是连锁反应。这篇内容面向的是那些手里只有一台能联网的机器、一台完全断网的目标机器,中间靠 U 盘或内网共享传文件的场景。我会把依赖怎么扒、包怎么下、顺序怎么排、报错怎么查讲清楚,让你少走几趟弯路。

2. 先搞清楚银河麒麟的包管理底子再动手

2.1 银河麒麟 V10 的 RPM 与 YUM/DNF 关系

银河麒麟桌面版 V10 SP1 用的是 RPM 包格式,包管理器默认是yum,部分新版本已经切到dnf。这两个工具在离线场景下的行为差异不大,核心都是通过仓库元数据解析依赖。离线安装的本质,就是把「在线解析依赖」变成「手动凑齐依赖集合」。

先确认目标机器的系统信息,这一步别偷懒:

# 查看系统版本和架构 cat /etc/kylin-release uname -m # 查看包管理器版本 rpm --version yum --version 2>/dev/null || dnf --version

/etc/kylin-release会告诉你具体是 V10 SP1 还是 SP2,uname -m确认是 x86_64 还是 aarch64。这两个信息决定了你去哪里找对应的 QGis 包。银河麒麟的软件源里 QGis 版本通常偏旧,如果你需要较新的 QGis,得从 Fedora EPEL 或 QGis 官方仓库找对应架构的 RPM。

2.2 为什么不能直接 rpm -ivh 一把梭

很多人第一反应是下载一个 QGis 的 RPM,然后rpm -ivh qgis.rpm。结果就是满屏的Failed dependencies。RPM 不会自动帮你解决依赖,它只会告诉你缺什么。而 QGis 的依赖链有多深?我实测过一个银河麒麟 V10 SP1 的干净环境,装 QGis 3.28 需要额外补 40 多个依赖包,涉及 Qt5 的十几个子模块、GDAL 的底层库、Python3 的绑定模块等等。

所以正确姿势是:在一台能联网的同版本银河麒麟机器上,用yumdownloader或dnf download把 QGis 及其全部依赖下载到本地目录,再整体搬到离线机器上安装。

# 在联网的银河麒麟机器上操作 # 先安装下载工具 sudo yum install -y yum-utils # 创建下载目录 mkdir -p /tmp/qgis-offline cd /tmp/qgis-offline # 下载 qgis 及其所有依赖(不安装) sudo yumdownloader --resolve --destdir=/tmp/qgis-offline qgis python3-qgis

--resolve是关键参数,它会递归解析所有依赖并一并下载。--destdir指定输出目录。执行完之后,这个目录里会有几十个 RPM 文件。注意,yumdownloader下载的是当前系统仓库里能解析到的版本,所以联网机器和目标机器的系统版本必须一致,否则依赖版本可能对不上。

2.3 离线仓库目录的结构怎么组织

下载完的 RPM 不要散着放,按类别分一下,后面排查问题会方便很多:

# 建议的目录结构 /tmp/qgis-offline/ ├── qgis-core/ # QGis 主程序包 ├── qt5-deps/ # Qt5 相关依赖 ├── gdal-proj-deps/ # GDAL、PROJ、GEOS 等 ├── python-deps/ # Python3 绑定和模块 └── misc-deps/ # 其他零散依赖

分类不是必须的,但当你在一堆包里面找某个.so文件属于哪个 RPM 时,分类能省不少时间。用rpm -qpl可以查看一个 RPM 包里包含哪些文件:

# 查看某个 RPM 包的文件列表 rpm -qpl qt5-qtbase-5.15.2-1.el8.x86_64.rpm | grep libQt5Core

这个命令在排查「某个库文件缺失」时特别有用,你可以反查它到底在哪个包里。

3. 把 QGis 依赖扒干净:下载、搬运、安装的完整链路

3.1 联网机器上的依赖下载实操

假设联网机器和目标机器都是银河麒麟 V10 SP1 x86_64,联网机器已经配好了可用的 yum 源。第一步是确认 QGis 在源里的包名:

# 搜索 qgis 相关包 yum search qgis # 或者用 provides 查 yum provides "*/qgis"

银河麒麟官方源里可能没有 QGis,这时候需要先添加 EPEL 源或者 QGis 官方源。但离线场景下,我一般建议直接找已经编译好的 RPM 包,避免在目标机器上处理源配置问题。

下载命令再强调一遍完整写法:

# 完整下载命令,包含依赖解析 sudo yumdownloader --resolve --destdir=/tmp/qgis-offline \ qgis \ qgis-python \ python3-qgis \ gdal \ proj \ geos

这里我把 QGis 主包和几个关键依赖都列上了。--resolve会自动处理这些包之间的依赖关系。执行完之后检查一下下载了多少个文件:

ls -1 /tmp/qgis-offline/*.rpm | wc -l

正常情况下应该在 40 到 80 个之间,取决于你的系统基线。如果只有十几个,说明--resolve没生效或者源里缺包。

3.2 用 createrepo 建本地离线源

把 RPM 搬到离线机器后,有两种安装方式:一种是直接rpm -ivh *.rpm,另一种是建本地仓库用 yum 装。我强烈推荐第二种,因为 yum 会自动处理安装顺序,而rpm -ivh *.rpm的顺序问题能把你逼疯。

在离线机器上操作:

# 把 RPM 放到一个目录 sudo mkdir -p /opt/local-repo/qgis sudo cp /media/usb/qgis-offline/*.rpm /opt/local-repo/qgis/ # 安装 createrepo 工具(如果离线机器上没有,需要提前下载) # 假设 createrepo 的 RPM 也在 U 盘里 sudo rpm -ivh /media/usb/createrepo-*.rpm # 创建仓库元数据 createrepo /opt/local-repo/qgis/ # 配置本地 yum 源 sudo tee /etc/yum.repos.d/local-qgis.repo << 'EOF' [local-qgis] name=Local QGis Repository baseurl=file:///opt/local-repo/qgis enabled=1 gpgcheck=0 EOF

createrepo会生成repodata目录,里面是仓库的元数据。gpgcheck=0是因为我们自己下载的包没有签名,离线环境下跳过签名检查是常见做法。配置好之后,直接:

sudo yum install -y qgis python3-qgis

yum 会从本地仓库解析依赖并自动排序安装。如果报某个包找不到,说明下载的时候漏了,回到联网机器补下。

3.3 安装后的验证与 QGis 首次启动

安装完成后别急着打开 QGis,先做几个基础验证:

# 确认 qgis 可执行文件位置 which qgis # 查看安装的 qgis 版本 qgis --version # 检查 Python 绑定是否可用 python3 -c "from qgis.core import Qgis; print(Qgis.version())"

如果qgis --version报库加载错误,用ldd查缺失的动态库:

# 找到 qgis 主程序路径后检查依赖 ldd $(which qgis) | grep "not found"

not found的那一行就是缺失的库。用rpm -qf反查这个库属于哪个包,然后确认那个包是否已经安装:

# 假设缺失 libQt5Core.so.5 rpm -qf /usr/lib64/libQt5Core.so.5 # 如果提示 not owned by any package,说明对应的 RPM 没装上

首次启动 QGis 时,如果界面能正常出来但加载图层时报 PROJ 数据库错误,通常是proj的数据文件路径没配好。银河麒麟上常见的情况是PROJ_LIB环境变量没设置:

# 查找 proj 数据目录 find /usr -name "proj.db" 2>/dev/null # 设置环境变量 export PROJ_LIB=/usr/share/proj

把这个 export 写到/etc/profile.d/qgis-env.sh里,避免每次手动设。

4. 离线安装 QGis 最容易翻车的几个地方

4.1 现象:安装时提示依赖冲突,两个包要求不同版本的同一个库

原因:联网机器和目标机器的系统基线不一致。比如联网机器上已经装过某些更新,导致yumdownloader解析出来的依赖版本比目标机器上的新,而目标机器上已有的旧版本包和新包冲突。

解决:在联网机器上先用yum history看看最近有没有做过系统更新。最稳妥的做法是找一台和目标机器系统版本完全一致的机器来下载依赖。如果找不到,用rpm -qa > packages.txt把目标机器的所有已安装包导出来,在联网机器上对比差异,手动调整下载的包版本。

4.2 现象:yum 本地安装时提示 "Cannot retrieve repository metadata"

原因:createrepo没有执行成功,或者baseurl路径写错了。常见的是file://后面少了一个斜杠,或者 RPM 文件没有放在baseurl指定的目录下。

解决:检查/opt/local-repo/qgis/repodata/目录是否存在。如果不存在,重新执行createrepo。然后确认baseurl的路径和实际存放 RPM 的路径完全一致。可以用yum repolist看仓库是否被正确识别。

4.3 现象:QGis 能启动但界面是英文,且菜单里很多功能灰色不可用

原因:缺少 QGis 的翻译包和 Python 插件包。yumdownloader下载qgis主包时,--resolve不一定会把qgis-python和语言包都拉下来,特别是当它们被标记为Recommends而不是Requires时。

解决:在联网机器上显式下载这些包:

sudo yumdownloader --destdir=/tmp/qgis-offline \ qgis-python \ qgis-qt5 \ qgis-server \ qgis-langpack-zh_CN

包名可能因版本不同有差异,用yum search qgis确认实际包名。下载后重新createrepo并安装。

4.4 现象:Python 控制台报 "ModuleNotFoundError: No module named 'qgis'"

原因:python3-qgis包安装了,但 Python 的site-packages路径不对,或者系统里有多个 Python 版本,QGis 绑定装到了另一个版本下面。

解决:先确认 QGis 用的哪个 Python:

head -1 $(which qgis) # 看 shebang 行指向的 python 路径

然后检查那个 Python 版本的site-packages里有没有qgis目录:

python3 -c "import sys; print(sys.path)" ls /usr/lib64/python3.*/site-packages/ | grep qgis

如果没有,手动把 QGis 的 Python 绑定路径加到PYTHONPATH:

export PYTHONPATH=/usr/share/qgis/python:$PYTHONPATH

4.5 现象:安装完 QGis 后,系统里其他依赖 Qt5 的软件打不开了

原因:离线安装时把系统原有的 Qt5 库升级到了不兼容的版本。yumdownloader下载的 Qt5 包版本可能比目标机器上的新,安装时直接覆盖了旧版本,导致其他软件链接失败。

解决:这是最麻烦的一种情况。预防手段是在安装前用rpm -qa | grep qt5记录目标机器上所有 Qt5 相关包的版本,然后在联网机器上下载时用--exclude排除掉这些包,只下载 QGis 真正需要的新增依赖。如果已经覆盖了,用rpm -Uvh --oldpackage降级回去:

# 从系统备份或安装镜像里找到旧版本 RPM sudo rpm -Uvh --oldpackage qt5-qtbase-5.12.5-1.el8.x86_64.rpm

5. 让离线 QGis 真正能用起来:加载天地图与日常维护技巧

5.1 离线环境下配置天地图影像底图

QGis 装好了,但离线机器上没法访问在线地图服务。如果你需要加载天地图影像作为底图,有两条路:一是提前在联网机器上把瓦片下载好,二是用 QGis 的 XYZ Tiles 连接配置一个本地瓦片服务。

先说 XYZ Tiles 的方式。在 QGis 里右键「XYZ Tiles」→「新建连接」,URL 填天地图的瓦片服务地址。但离线机器访问不了外网,所以这个方式只在机器能通内网代理时有用。真正离线的话,需要提前用工具把瓦片下载成 MBTiles 或目录结构,然后在 QGis 里用「添加栅格图层」加载。

我一般用mbutil或gdal_translate把下载好的瓦片转成 GeoTIFF:

# 把瓦片目录转成 GeoTIFF gdal_translate -of GTiff \ -co TILED=YES \ -co COMPRESS=JPEG \ /path/to/tiles/ \ /path/to/output.tif

然后在 QGis 里直接拖入这个 GeoTIFF 就行。注意坐标系要匹配,天地图影像通常是 EPSG:3857(Web Mercator),QGis 工程坐标系也要设成一样的,否则图层会对不上。

5.2 离线 QGis 的插件安装方法

QGis 的插件默认从在线仓库下载,离线环境下需要手动安装。插件包是.zip格式,从联网机器下载后放到 QGis 的插件目录:

# QGis 插件目录通常在 ~/.local/share/QGIS/QGIS3/profiles/default/python/plugins/ # 或者 /usr/share/qgis/python/plugins/

把 zip 解压到上述目录,重启 QGis 就能在插件管理器里看到。注意插件的metadata.txt里会声明兼容的 QGis 版本,版本不匹配的话插件不会加载。

5.3 一个我踩过的坑:离线源目录别放在 /tmp

有次我把 RPM 放在/tmp/qgis-offline,createrepo也建在那边,装完之后重启机器,/tmp被清了,本地源直接失效。后来再装其他软件时 yum 报仓库不可用,排查了半天才想起来是/tmp的问题。现在我的习惯是离线源统一放在/opt/local-repo/下面,这个目录不会被系统清理,而且权限也好控制。

另外,如果你管理的离线机器不止一台,建议把整个/opt/local-repo/打包成一个 tar,新机器直接解压就能用,省得每台都重新createrepo。打包的时候记得把repodata目录一起打进去:

tar czf local-repo-qgis.tar.gz -C /opt/local-repo/qgis .

到新机器上解压到同样路径,配好.repo文件就能直接yum install。这个习惯帮我省了很多重复劳动,希望帮到你。

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

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

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

立即咨询