Linux下安装Hermes Agent v0.19.1卡在依赖环节,需按系统类型安装缺失的底层库:Ubuntu/Debian执行sudo apt install -y build-essential libssl-dev libpq-dev python3-dev libsystemd-dev;CentOS/RHEL 8+运行sudo dnf groupinstall -y "Development Tools" && sudo dnf install -y openssl-devel postgresql-devel python3-devel systemd-devel;RHEL 7需先启用SCL源并安装devtoolset-9与rh-python38-python-devel,再装openssl-devel等,并用scl enable rh-python38 bash进入新shell确保Python 3.8生效。
☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 多模态理解力帮你轻松跨越从0到1的创作门槛☜☜☜

Linux下安装Hermes Agent v0.19.1时卡在依赖环节,常见于缺失libssl、libpq、python3-dev或systemd-devel等底层库,直接报错“Failed to build wheels”或“cannot find -lssl”,不是网络慢或权限问题,而是编译环境不满足强制要求。
确认缺失的依赖类型
运行 pip install -v . 2>&1 | grep "error:" | head -10,捕获最靠前的真实错误行——重点看末尾带 -lxxx 或 fatal error: xxx.h 的内容。
若出现 fatal error: openssl/ssl.h,说明缺 OpenSSL 开发头文件;若报 cannot find -lpq,则是 PostgreSQL 客户端库未装;若提示 ModuleNotFoundError: No module named 'setuptools',属于 Python 构建链断裂,不是系统级依赖问题。
分系统安装核心依赖
方法一:Ubuntu/Debian 系统
sudo apt update && sudo apt install -y build-essential libssl-dev libpq-dev python3-dev libsystemd-dev
注意:libsystemd-dev 在 v0.19.1 中是硬性依赖,用于 systemd journal 日志采集,漏装会导致 setup.py 编译中断且无明确提示。
方法二:CentOS/RHEL 8+(含 AlmaLinux/Rocky)
sudo dnf groupinstall -y "Development Tools" → sudo dnf install -y openssl-devel postgresql-devel python3-devel systemd-devel
方法三:CentOS/RHEL 7(已 EOL,但仍有生产环境在用)
先启用 Software Collections(SCL)源:sudo yum install -y centos-release-scl → 启用 devtoolset 和 rh-python38:sudo yum install -y devtoolset-9-gcc* rh-python38-python-devel → 再装基础依赖:sudo yum install -y openssl-devel postgresql-devel systemd-devel。RHEL 7 默认 Python 3.6 不满足 Hermes v0.19.1 要求的最低 3.8,【必须启用 rh-python38 并用 scl enable rh-python38 bash 进入新 shell】,否则 pip 仍调用旧 Python。
验证 Python 构建环境完整性
第一步:检查 setuptools 和 wheel 是否为最新版
python3 -m pip install --upgrade setuptools wheel
第二步:确认 distutils 模块可导入
运行 python3 -c "import distutils.util",若报错 ModuleNotFoundError,说明 python3-dev(或 python3-devel)未生效,需重装对应开发包并重启终端。
第三步:临时禁用 PEP 517 构建(仅调试用)
在项目根目录执行:pip install --no-build-isolation --no-deps -e .。这跳过隔离构建环境,直接使用系统已有工具链,能快速暴露真实缺失项——如果此时仍失败,错误信息会更贴近系统级依赖本身。


















