探索 Python 应用的分层依赖:解决 Linux 环境中的 libvirt-python 安装问题
背景
在 Ubuntu-22.0 和 国内某常用Linux发行版1070 上用 Python 开发基于 libvrt-python 的应用,在 Ubuntu 平台的开发过程中一切顺利,但在 国内某常用Linux发行版 上开发时,遇到了两个关键问题:
-
Python 版本限制:应用需要 Python 3.10 及以上版本,而 国内某常用Linux发行版 自带的 Python 版本为 3.7.3,因此需要升级 Python 版本。
-
libvirt-python 包不可用:在 Ubuntu 平台,
libvirt-python
包能够正常安装和使用,但在 国内某常用Linux发行版 上,即使升级了 Python 版本,依然无法成功安装和使用此包,成为开发的主要障碍。
本文将重点分析和解决 libvirt-python
包不可用的问题。在此之前,简单回顾 Python 版本升级的过程。
Python 版本升级
问题描述
国内某常用Linux发行版 1070 自带的 Python 版本为 3.7.3,但应用需要 Python 3.10 及以上版本。尝试升级 Python 到 3.10.15 版本时,遇到了以下问题:
- 系统权限限制:国内某常用Linux发行版 系统默认需要开启“开发者模式”才能使用
sudo
命令安装软件包。 - 安装失败:即使开启了“开发者模式”,在源码安装 Python 3.10.15 的过程中仍然出现 “Segment Fault” 错误,导致安装失败。
原因分析与解决方案
煎熬了两天,各种搜索未果后,我已经准备上gdb来调试了,偶然获得"高人"指点,发现问题的根源在于 国内某常用Linux发行版 的应用安全机制1。国内某常用Linux发行版 默认启用了应用签名限制,只允许运行经过签名的应用程序,即使是编译过程中生成的工具也不允许运行,从而引发了异常。
为了完成 Python 的安装,需要调整安全设置:
开始 —> 安全中心 —> 安全工具 —> 应用安全
将默认选项 “仅允许签名应用” 修改为 “允许任意应用”。
完成上述步骤后,重新尝试从源码安装 Python 3.10.15 即可成功。
虽然 Python 升级问题解决起来有些“曲折”,但相较于接下来的 libvirt-python 包问题,这只是一个小插曲。接下来将继续复盘如何处理 libvirt-python 包的不可用问题。
Python 应用的分层依赖:安装与部署的视角
在安装和部署 Python 应用时,依赖关系往往分为多个层次。从 Python 包的直接依赖,到系统级的共享库,最终到硬件支持,每一层的正确配置对于成功安装并运行 Python 应用至关重要。特别是在像 国内某常用Linux发行版 这样的操作系统环境中,理解这些层次关系对于顺利解决诸如 libvirt-python 这样的包安装问题具有重要意义。以下是 Python 应用安装和部署过程中的分层依赖结构:

这种依赖关系可以简单归纳如下:
应用层依赖:Python 包及其嵌套依赖(如 scikit-learn 的 numpy 依赖)。
环境层依赖:Python 解释器、包管理工具(pip)及虚拟环境(如 venv)。
二进制层依赖:Python 包中的 C 扩展模块和相关共享库,它们通常以 .so 文件形式存在,运行时候需要正确链接系统共享库。
系统层依赖:系统级共享库(如 glibc)、平台特定库(如 GPU 驱动),它们是二进制模块运行的基础。
硬件与内核层依赖:Linux 内核调用及硬件驱动支持。
接下来,我将基于这一分层模型,详细分析和解决 libvirt-python 的不可用问题。
libvirt-python的分层依赖
libvirt-python2 是一个通过 C 扩展形式实现的 Python 包,用于调用底层 libvirt 库函数,提供对虚拟化管理的接口支持。它的依赖关系横跨 Python 包层、二进制层、系统层,因此使用过程中容易出现多