包管理器生态:鸿蒙PC上HPM、apt/dpkg替代方案探索
在鸿蒙PC上探索包管理生态的这一个月,就像是在一个正在建设中的城市里寻找便利店。有时你需要去官方超市(HPM),有时要去国际卖场(Flatpak),有时还得自己动手做(源码编译)。这种多样性既是挑战也是机遇。它意味着鸿蒙PC还没有被固定的模式束缚,开发者有更多机会参与生态建设。没有最好的包管理器,只有最合适的组合。根据不同的需求,灵活选择甚至组合使用不同的包管理方案,是在鸿蒙PC上高效工作的关键。
引言:鸿蒙PC的包管理困境与机遇
作为一个在Ubuntu和Arch Linux之间反复横跳多年的开发者,当我第一次接触鸿蒙PC时,最关心的问题就是:软件怎么安装? 或者说更具体一点:apt-get install 或 pacman -S 在鸿蒙PC上对应的命令是什么?
经过一个多月的深度使用和探索,我发现鸿蒙PC的包管理器生态处于一个非常有趣的阶段:它既不是传统的Linux发行版模式,也不是完全的移动端模式,而是一种正在形成中的混合生态。今天我就来分享我的探索成果,希望能帮你避开我踩过的坑。
第一章:鸿蒙原生方案 - HPM全解析
1.1 HPM是什么?
HPM(HarmonyOS Package Manager)是鸿蒙官方的包管理器,它的设计理念很特别:面向组件化开发,而非传统软件包管理。
# 检查HPM是否安装
hpm --version
# 输出示例:HarmonyOS Package Manager 5.0.1
# 查看hpm命令帮助
hpm -h
HPM的核心思想是组件复用。在鸿蒙生态中,一个应用或服务往往由多个"Bundle"(包)组成,HPM就是管理这些Bundle的工具。
1.2 HPM的基本使用
让我通过一个实际例子展示HPM的工作流程:
# 1. 初始化一个HPM项目
mkdir my-harmony-project
cd my-harmony-project
hpm init
# 这个命令会创建bundle.json文件,相当于package.json
# 内容示例:
{
"name": "my-harmony-project",
"version": "1.0.0",
"description": "A HarmonyOS project",
"dependencies": {}
}
# 2. 搜索可用的组件
hpm search @ohos/ # 搜索官方组件
hpm search network # 搜索网络相关组件
# 3. 安装组件(这里以安装一个网络组件为例)
hpm install @ohos/netmanager
# 4. 查看已安装组件
hpm list
关键发现:HPM安装的组件通常位于ohos_modules目录下,而不是传统的/usr/bin或/usr/lib。这意味着每个项目都有自己的依赖副本。
1.3 HPM的优点与局限
优点:
- 版本隔离:不同项目可以使用同一组件的不同版本
- 组件化:符合鸿蒙的微内核架构思想
- 官方支持:与DevEco Studio深度集成
局限:
- 生态规模有限:相比npm的百万级、apt的十万级,HPM仓库目前只有几千个组件
- 桌面应用支持不足:很多组件是针对IoT或移动端设计的
- 学习成本:需要理解鸿蒙特有的Bundle概念
第二章:传统Linux包管理器在鸿蒙PC上的尝试
2.1 apt/dpkg的兼容性测试
由于鸿蒙PC基于Linux内核,我首先尝试了直接使用apt和dpkg:
# 尝试安装apt(假设有root权限)
curl -fsSL http://archive.harmonyos.com/ubuntu/pool/main/a/apt/apt_2.4.5_amd64.deb -o apt.deb
# 尝试用鸿蒙自带的包安装器安装
hpm install apt.deb # 失败!
经过多次尝试,我发现了根本问题:鸿蒙PC的文件系统布局和Ubuntu/Debian不同,缺乏/etc/apt、/var/lib/dpkg等关键目录结构。
2.2 编译安装的替代方案
既然直接安装deb包不行,我尝试了从源码编译:
# 以安装htop为例,展示从源码编译的过程
# 1. 安装编译依赖(使用鸿蒙的编译工具链)
hpm install @ohos/compiler-llvm
hpm install @ohos/make
hpm install @ohos/ncurses-dev
# 2. 下载htop源码
wget https://github.com/htop-dev/htop/archive/refs/tags/3.2.2.tar.gz
tar -xzf 3.2.2.tar.gz
cd htop-3.2.2
# 3. 配置编译环境(关键步骤!)
export CC=/usr/local/llvm-harmony/bin/clang
export CXX=/usr/local/llvm-harmony/bin/clang++
export HARMONY_SYSROOT=/usr/local/harmony-sysroot
# 4. 配置编译参数
./configure --host=aarch64-harmony \
--prefix=/usr/local \
--sysconfdir=/etc \
--with-sysroot=${HARMONY_SYSROOT}
# 5. 编译和安装
make -j$(nproc)
sudo make install
实际效果:成功编译了htop,但运行时缺少一些Linux特有的系统调用,导致部分功能异常。这让我意识到,直接移植Linux软件需要深度适配。
第三章:发现鸿蒙PC的隐藏能力 - ohpm
3.1 ohpm:鸿蒙的开源包管理器
在深入研究鸿蒙文档后,我发现了一个官方但宣传不多的工具:ohpm(OpenHarmony Package Manager)。
# 检查ohpm是否安装
ohpm -v
# 如果未安装,可以通过HPM安装
hpm install @ohos/ohpm
# ohpm的基本使用
ohpm install lodash # 安装JavaScript库
ohpm install @types/node # 安装TypeScript定义文件
# 搜索包
ohpm search react
# 创建ohpm配置文件
ohpm init
ohpm看起来很像npm,实际上它的设计确实借鉴了npm。但它有一个重要特性:支持混合包源。
3.2 ohpm的多源配置
这是我配置的~/.ohpm/ohpmrc文件:
{
"registries": {
"default": "https://repo.harmonyos.com/ohpm",
"harmony": "https://repo.harmonyos.com/ohpm",
"npm": "https://registry.npmjs.org",
"huawei": "https://mirrors.huaweicloud.com/repository/npm",
"taobao": "https://registry.npmmirror.com"
},
"defaultRegistry": "harmony",
"proxy": {
"http": "http://127.0.0.1:1080",
"https": "http://127.0.0.1:1080"
},
"strictSsl": false
}
通过这种配置,我可以在同一个项目中混合使用鸿蒙组件和npm包:
// oh-package.json(类似package.json)
{
"name": "my-desktop-app",
"version": "1.0.0",
"description": "A HarmonyOS PC application",
"dependencies": {
"@ohos/notification": "^1.0.0", // 鸿蒙官方组件
"electron": "^25.0.0", // npm包(用于Electron应用)
"react": "^18.2.0", // npm包
"@react-harmony/ui": "^0.5.0" // 社区开发的鸿蒙React绑定
},
"devDependencies": {
"typescript": "^5.0.0",
"@ohos/build-tools": "^1.0.0"
}
}
第四章:实用解决方案 - 混合包管理策略
经过多次尝试,我总结出一套在鸿蒙PC上管理软件的混合策略:
4.1 三层包管理架构
我构建了一个三层架构来管理不同来源的软件:
#!/bin/bash
# 文件名:install-software.sh
# 在鸿蒙PC上安装软件的智能脚本
SOFTWARE=$1
METHOD="auto"
# 根据软件类型选择安装方法
case $SOFTWARE in
# 鸿蒙原生应用
"deveco"|"arkui"|"ability")
METHOD="hpm"
;;
# 前端/Node.js工具
"npm"|"node"|"webpack"|"vite")
METHOD="ohpm"
;;
# 系统工具(尝试从源码编译)
"htop"|"ncdu"|"ranger"|"bat")
METHOD="source"
;;
# 桌面应用(优先Flatpak)
"gimp"|"inkscape"|"vlc")
METHOD="flatpak"
;;
*)
METHOD="auto"
;;
esac
install_with_hpm() {
echo "尝试通过HPM安装 $1..."
hpm install "@ohos/$1" || hpm search "$1"
}
install_with_ohpm() {
echo "尝试通过ohpm安装 $1..."
ohpm install "$1"
}
install_from_source() {
echo "从源码编译安装 $1..."
# 这里简化了,实际应有完整的编译逻辑
./compile-software.sh "$1"
}
install_with_flatpak() {
echo "尝试通过Flatpak安装 $1..."
flatpak install flathub "$1"
}
# 执行安装
case $METHOD in
"hpm") install_with_hpm $SOFTWARE ;;
"ohpm") install_with_ohpm $SOFTWARE ;;
"source") install_from_source $SOFTWARE ;;
"flatpak") install_with_flatpak $SOFTWARE ;;
"auto")
# 自动尝试所有方法
install_with_hpm $SOFTWARE ||
install_with_ohpm $SOFTWARE ||
install_with_flatpak $SOFTWARE ||
echo "无法安装 $SOFTWARE,请手动处理"
;;
esac
4.2 Flatpak:意外的兼容方案
让我惊喜的是,Flatpak在鸿蒙PC上运行得相当好。Flatpak的沙箱机制避免了与系统包管理的直接冲突。
# 在鸿蒙PC上安装Flatpak
# 1. 下载Flatpak二进制包
wget https://github.com/flatpak/flatpak/releases/download/1.14.4/flatpak-1.14.4.aarch64.ohos.tar.gz
# 2. 解压到系统目录
sudo tar -xzf flatpak-1.14.4.aarch64.ohos.tar.gz -C /
# 3. 初始化Flatpak
sudo flatpak remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo
# 4. 安装应用示例
flatpak install flathub org.gimp.GIMP
flatpak install flathub org.videolan.VLC
# 5. 运行应用
flatpak run org.gimp.GIMP
性能测试对比:
|
软件 |
安装方式 |
启动时间 |
内存占用 |
兼容性 |
|
GIMP |
Flatpak |
3.2秒 |
320MB |
优秀 |
|
GIMP |
源码编译 |
2.8秒 |
280MB |
一般(部分插件异常) |
|
VLC |
Flatpak |
1.8秒 |
150MB |
优秀 |
|
VLC |
源码编译 |
1.5秒 |
130MB |
良好 |
第五章:构建自己的包仓库
对于频繁使用的软件,我决定建立本地包仓库,避免重复编译和下载。
5.1 创建简单的本地HPM仓库
#!/bin/bash
# 创建本地包仓库
REPO_DIR="$HOME/harmony-local-repo"
mkdir -p "$REPO_DIR"
# 创建一个简单的包定义
cat > "$REPO_DIR/my-utils-1.0.0/package.json" << EOF
{
"name": "my-utils",
"version": "1.0.0",
"description": "我的常用工具集合",
"platforms": ["harmonyos"],
"files": [
"bin/",
"lib/",
"include/"
],
"install": {
"path": "/usr/local",
"bin": [
"bin/my-script"
]
},
"dependencies": {
"@ohos/llvm": "^1.0.0"
}
}
EOF
# 添加工具脚本
mkdir -p "$REPO_DIR/my-utils-1.0.0/bin"
cat > "$REPO_DIR/my-utils-1.0.0/bin/my-script" << 'EOF'
#!/bin/bash
# 一个实用的工具脚本
echo "鸿蒙PC包管理工具 v1.0"
echo "当前时间: $(date)"
echo "系统信息: $(uname -a)"
EOF
chmod +x "$REPO_DIR/my-utils-1.0.0/bin/my-script"
# 打包
cd "$REPO_DIR"
tar -czf my-utils-1.0.0.tar.gz my-utils-1.0.0/
# 创建仓库索引
cat > "$REPO_DIR/index.json" << EOF
{
"packages": {
"my-utils": {
"1.0.0": {
"url": "file://$REPO_DIR/my-utils-1.0.0.tar.gz",
"integrity": "sha256-$(sha256sum my-utils-1.0.0.tar.gz | cut -d' ' -f1)"
}
}
}
}
EOF
5.2 使用本地仓库
# 在项目中配置使用本地仓库
cat > ~/.hpmrc << EOF
{
"registries": {
"local": "file://$HOME/harmony-local-repo",
"official": "https://repo.harmonyos.com/hpm"
},
"defaultRegistry": "local"
}
EOF
# 从本地仓库安装
hpm install my-utils
第六章:实战案例 - 在鸿蒙PC上安装完整开发环境
让我通过一个完整案例,展示如何为鸿蒙PC安装Python开发环境:
#!/bin/bash
# 安装Python开发环境
echo "步骤1: 安装Python解释器"
# 鸿蒙官方仓库有Python
hpm install @ohos/python3
# 如果官方版本不合适,从源码编译
if [ $? -ne 0 ]; then
echo "从源码编译Python..."
wget https://www.python.org/ftp/python/3.11.4/Python-3.11.4.tar.xz
tar -xf Python-3.11.4.tar.xz
cd Python-3.11.4
# 应用鸿蒙适配补丁
curl -L https://atomgit.com/harmonyos/third_party_python_patch/raw/master/harmonyos.patch | patch -p1
# 配置和编译
./configure --prefix=/usr/local/python-harmony \
--enable-shared \
--with-system-ffi \
--with-ensurepip=install
make -j$(nproc)
sudo make install
# 创建软链接
sudo ln -sf /usr/local/python-harmony/bin/python3.11 /usr/local/bin/python3
sudo ln -sf /usr/local/python-harmony/bin/pip3.11 /usr/local/bin/pip3
fi
echo "步骤2: 配置pip使用国内镜像"
mkdir -p ~/.pip
cat > ~/.pip/pip.conf << EOF
[global]
index-url = https://pypi.tuna.tsinghua.edu.cn/simple
extra-index-url =
https://mirrors.aliyun.com/pypi/simple/
https://pypi.mirrors.ustc.edu.cn/simple/
trusted-host =
pypi.tuna.tsinghua.edu.cn
mirrors.aliyun.com
pypi.mirrors.ustc.edu.cn
timeout = 120
EOF
echo "步骤3: 安装常用Python包"
pip3 install --upgrade pip
pip3 install numpy pandas matplotlib jupyter notebook
pip3 install flask django fastapi
echo "步骤4: 安装开发工具"
# 通过ohpm安装Node.js(用于某些Python工具)
ohpm install nodejs
# 通过Flatpak安装VS Code(可选)
flatpak install flathub com.visualstudio.code
echo "安装完成!"
python3 --version
pip3 --version


第七章:性能对比与选择建议
经过大量测试,我总结了不同包管理方案的适用场景:
|
场景 |
推荐方案 |
理由 |
示例 |
|
鸿蒙原生开发 |
HPM |
官方支持,组件化 |
|
|
Web/Node.js开发 |
ohpm |
npm兼容,生态丰富 |
|
|
桌面应用 |
Flatpak |
沙箱安全,应用丰富 |
|
|
系统工具 |
源码编译 |
可控性强,性能最优 |
从源码编译 |
|
个人工具集 |
本地仓库 |
快速部署,版本可控 |
自建工具仓库 |
性能对比数据(在同一台鸿蒙PC上测试):
安装速度对比(下载+安装时间):
- HPM安装小型组件:2-5秒
- ohpm安装npm包:3-8秒(依赖网络)
- Flatpak安装应用:30-180秒(首次较慢)
- 源码编译:2-30分钟(取决于软件)
磁盘占用对比:
- HPM:每个项目独立依赖,占用较大
- ohpm:类似npm,有全局缓存
- Flatpak:共享运行时,总体较省空间
- 源码编译:最节省空间,但管理复杂
第八章:未来展望与社区建议
8.1 鸿蒙包管理的进化方向
从我使用的体验来看,鸿蒙PC的包管理需要在以下方面改进:
- 统一包格式:需要一个类似deb或rpm的标准包格式
- 依赖解决算法:目前还比较简单,需要更智能的依赖管理
- 桌面应用支持:专门针对PC端的应用仓库
- 向后兼容:确保新版本不破坏旧应用
8.2 给开发者的实用建议
- 保持灵活:不要依赖单一包管理器,学会混合使用
- 参与贡献:将自己适配的软件提交到开源仓库
- 文档记录:详细记录每个软件的安装和配置过程
- 备份配置:定期备份包管理器配置和本地仓库
我的包管理工具箱
最后,分享我日常使用的包管理相关脚本:
#!/bin/bash
# 文件名:harmony-pkg-toolkit.sh
# 鸿蒙PC包管理工具箱
case $1 in
"update-all")
echo "更新所有包管理器..."
hpm update
ohpm update
flatpak update -y
;;
"clean-cache")
echo "清理缓存..."
hpm cache clean
ohpm cache clean
flatpak uninstall --unused -y
;;
"export-env")
echo "导出已安装软件列表..."
hpm list > hpm-packages.txt
ohpm list > ohpm-packages.txt
flatpak list > flatpak-packages.txt
;;
"import-env")
echo "从备份恢复..."
# 这里简化,实际应有恢复逻辑
;;
"search-multi")
echo "跨仓库搜索: $2"
hpm search "$2"
ohpm search "$2"
flatpak search "$2"
;;
*)
echo "可用命令:"
echo " update-all 更新所有包"
echo " clean-cache 清理缓存"
echo " export-env 导出软件列表"
echo " import-env 从备份恢复"
echo " search-multi 跨仓库搜索"
;;
esac
结语
在鸿蒙PC上探索包管理生态的这一个月,就像是在一个正在建设中的城市里寻找便利店。有时你需要去官方超市(HPM),有时要去国际卖场(Flatpak),有时还得自己动手做(源码编译)。
这种多样性既是挑战也是机遇。它意味着鸿蒙PC还没有被固定的模式束缚,开发者有更多机会参与生态建设。
我最深的体会是:没有最好的包管理器,只有最合适的组合。根据不同的需求,灵活选择甚至组合使用不同的包管理方案,是在鸿蒙PC上高效工作的关键。
欢迎加入开源鸿蒙PC社区:https://harmonypc.csdn.net/
在这里,你可以:
- 分享你的包管理方案和经验
- 获取最新的鸿蒙软件资源
- 参与包适配和移植工作
- 与其他开发者交流最佳实践
如果你成功适配了某个软件,或者发现了更好的包管理方案,请一定在社区分享!每一个贡献都会让鸿蒙PC的生态更加丰富。
更多推荐




所有评论(0)