A unified package management interface for Linux distributions
Project description
plpm_liumou_Stable
🌟 特性
- 🚀 分离架构: 提供独立的在线和离线包管理器接口
- 🔍 自动检测: 自动识别当前系统的在线和离线包管理器
- 💻 Python 3.5+ 兼容: 支持Python 3.5及更高版本
- 📦 在线包管理: 支持apt、yum、dnf、apk等在线包管理器,支持更新和升级操作
- 📁 离线包管理: 支持dpkg、rpm等离线包管理器,专注于本地包管理
- 🛡️ 错误处理: 完善的错误处理和异常管理
- 🧪 完整测试: 全面的单元测试覆盖
📊 项目统计
| 统计项 | 数据 |
|---|---|
| PyPI 项目 | plpm_liumou_Stable |
| Gitee 项目 | liumou_site/plpm |
| 最新版本 | |
| 下载量 | |
| Python 版本 | 3.5+ |
| 许可证 | MIT |
| 平台 | Linux |
| 作者邮箱 | liumou.site@qq.com |
📦 安装
从PyPI安装
pip install plpm_liumou_Stable
使用国内镜像加速(推荐)
使用清华大学镜像源加速下载:
pip install plpm_liumou_Stable -i https://pypi.tuna.tsinghua.edu.cn/simple/
升级到最新版本
当有新版本发布时,可以使用以下命令升级到最新版本:
pip install --upgrade plpm_liumou_Stable
使用国内镜像升级
pip install --upgrade plpm_liumou_Stable -i https://pypi.tuna.tsinghua.edu.cn/simple/
卸载包
如果需要卸载plpm_liumou_Stable包,可以使用以下命令:
pip uninstall plpm_liumou_Stable
🚀 快速开始
基本使用
使用在线包管理器
from plpm import OnlinePackageManager
# 创建在线包管理器实例(自动检测系统在线包管理器)
manager = OnlinePackageManager()
# 检查是否有可用的在线包管理器
if manager.is_manager_available():
print(f"检测到在线包管理器: {manager.get_manager_name()}")
# 更新包列表
manager.update()
# 搜索包
packages = manager.search("python")
print(f"找到 {len(packages)} 个相关包")
# 列出已安装的包
installed = manager.list_installed()
print(f"已安装 {len(installed)} 个包")
# 检查特定包是否已安装
if manager.installed("python3"):
print("python3 已安装")
else:
print("python3 未安装")
# 系统升级
manager.upgrade()
else:
print("未检测到可用的在线包管理器")
使用离线包管理器
from plpm import OfflinePackageManager
# 创建离线包管理器实例(自动检测系统离线包管理器)
manager = OfflinePackageManager()
# 检查是否有可用的离线包管理器
if manager.is_manager_available():
print(f"检测到离线包管理器: {manager.get_manager_name()}")
# 搜索包
packages = manager.search("python")
print(f"找到 {len(packages)} 个相关包")
# 列出已安装的包
installed = manager.list_installed()
print(f"已安装 {len(installed)} 个包")
# 检查特定包是否已安装
if manager.installed("python3"):
print("python3 已安装")
else:
print("python3 未安装")
# 注意:离线包管理器不支持update和upgrade操作
print("离线包管理器不支持系统更新和升级操作")
else:
print("未检测到可用的离线包管理器")
使用特定包管理器
from plpm import get_package_manager
# 获取特定的包管理器
apt_manager = get_package_manager(manager_name='apt')
if apt_manager and apt_manager.is_available():
# 安装包
apt_manager.install(['curl', 'wget'])
# 获取包信息
info = apt_manager.info('python3')
print(info)
列出可用的包管理器
from plpm import list_available_managers
# 列出系统中可用的包管理器
available = list_available_managers()
print(f"可用的包管理器: {available}")
📚 API 参考
OnlinePackageManager 类
专门管理在线包管理器(apt、yum、dnf、apk),支持软件安装、更新、升级等操作。
构造函数
OnlinePackageManager(sudo=False, preferred_manager=None)
sudo: 是否使用sudo执行特权操作(默认False)preferred_manager: 优先使用的在线包管理器名称('apt', 'yum', 'dnf', 'apk')
主要方法
| 方法 | 描述 | 返回值 |
|---|---|---|
install(packages) |
安装包 | bool |
remove(packages) |
移除包 | bool |
update() |
更新包列表 | bool |
upgrade(packages=None) |
升级包 | bool |
search(pattern) |
搜索包 | list |
info(package) |
获取包信息 | dict |
list_installed() |
列出已安装的包 | list |
installed(package) |
检查指定包是否已安装 | bool |
clean_cache() |
清理包缓存 | bool |
autoremove() |
自动移除不需要的包 | bool |
OfflinePackageManager 类
专门管理离线包管理器(dpkg、rpm),支持软件安装、移除、查询等操作。
构造函数
OfflinePackageManager(sudo=False, preferred_manager=None)
sudo: 是否使用sudo执行特权操作(默认False)preferred_manager: 优先使用的离线包管理器名称('dpkg', 'rpm')
主要方法
| 方法 | 描述 | 返回值 |
|---|---|---|
install(packages) |
安装包 | bool |
remove(packages) |
移除包 | bool |
search(pattern) |
搜索包 | list |
info(package) |
获取包信息 | dict |
list_installed() |
列出已安装的包 | list |
installed(package) |
检查指定包是否已安装 | bool |
verify(package) |
验证包完整性 | bool |
install_from_file(file_path) |
从本地文件安装包 | bool |
注意: 离线包管理器不支持 update() 和 upgrade() 方法,因为这些操作需要网络连接。
工具函数
get_package_manager(sudo=False, manager_name=None): 获取特定包管理器实例list_available_managers(): 列出可用的包管理器detect_online_package_manager(): 自动检测在线包管理器detect_offline_package_manager(): 自动检测离线包管理器
🛠️ 支持的包管理器
在线包管理器
| 管理器 | 系统 | 命令 | 特点 |
|---|---|---|---|
| AptManager | Debian/Ubuntu | apt-get, apt-cache | 依赖关系处理优秀,用户友好 |
| YumManager | CentOS/RHEL | yum | 企业级稳定,自动依赖解决 |
| DnfManager | Fedora | dnf | YUM现代化替代,性能更好 |
| ApkManager | Alpine Linux | apk | 轻量级,适合容器环境 |
离线包管理器
| 管理器 | 系统 | 命令 | 特点 |
|---|---|---|---|
| DpkgManager | Debian/Ubuntu | dpkg | 底层包管理,不处理依赖 |
| RpmManager | Red Hat | rpm | 底层包管理,企业级标准 |
其他常见Linux包管理器
| 管理器 | 系统 | 类型 | 特点 |
|---|---|---|---|
| Pacman | Arch Linux/Manjaro | 在线 | 简单高效,滚动更新 |
| Zypper | openSUSE/SUSE | 在线 | 企业级功能,稳定可靠 |
| Portage | Gentoo Linux | 源码编译 | 高度定制,性能优化 |
| Snap | 跨发行版 | 容器化 | 沙盒安全,应用隔离 |
| Flatpak | 跨发行版 | 容器化 | 现代应用分发标准 |
| Homebrew | Linux/macOS | 用户级 | 无需root权限 |
包管理器分类总结
| 分类 | 包管理器 | 主要用途 |
|---|---|---|
| 传统在线包管理 | APT, YUM, DNF, APK | 系统级软件安装和更新 |
| 底层包管理 | DPKG, RPM | 基础包安装和查询 |
| 滚动更新 | Pacman | 最新软件体验 |
| 企业级 | Zypper | 商业环境支持 |
| 源码编译 | Portage | 高度定制化 |
| 现代应用分发 | Snap, Flatpak | 跨发行版应用 |
| 用户级管理 | Homebrew | 开发工具管理 |
💡 示例
批量安装软件包
from plpm import UnifiedPackageManager
manager = UnifiedPackageManager()
if manager.is_manager_available():
# 批量安装开发工具
packages = ['git', 'vim', 'curl', 'wget']
if manager.install(packages):
print("软件包安装成功")
else:
print("软件包安装失败")
系统维护任务
from plpm import UnifiedPackageManager
manager = UnifiedPackageManager(sudo=True)
if manager.is_manager_available():
# 更新系统
manager.update()
manager.upgrade()
# 清理缓存
manager.clean_cache()
print("系统维护完成")
包信息查询
from plpm import UnifiedPackageManager
manager = UnifiedPackageManager()
if manager.is_manager_available():
# 搜索Python相关包
python_packages = manager.search("python")
for pkg in python_packages[:5]: # 显示前5个结果
info = manager.info(pkg['name'])
print(f"包名: {pkg['name']}")
print(f"版本: {pkg.get('version', 'N/A')}")
print(f"描述: {pkg.get('description', 'N/A')}")
print("-" * 50)
🏗️ 项目结构
plpm_liumou_Stable/
├── src/plpm/
│ ├── __init__.py # 包入口和主要接口
│ ├── core.py # 核心抽象类和基础功能
│ ├── online/ # 在线包管理器实现
│ │ ├── __init__.py
│ │ ├── apt.py # apt包管理器
│ │ ├── yum.py # yum包管理器
│ │ ├── dnf.py # dnf包管理器
│ │ └── apk.py # apk包管理器
│ ├── offline/ # 离线包管理器实现
│ │ ├── __init__.py
│ │ ├── dpkg.py # dpkg包管理器
│ │ └── rpm.py # rpm包管理器
│ └── unified.py # 在线和离线包管理器接口
├── tests/ # 测试文件
│ ├── __init__.py
│ ├── test_core.py # 核心功能测试
│ └── test_unified.py # 在线和离线接口测试
├── pyproject.toml # 项目配置
└── README.md # 项目文档
🧪 测试
运行测试
python3 -m unittest discover tests/ -v
测试覆盖率
项目包含完整的单元测试,确保代码质量和功能稳定性。
🔧 开发
代码规范
项目使用以下工具进行代码质量检查:
# 代码格式化
python3 -m black src/
python3 -m isort src/
# 类型检查
python3 -m mypy src/
# 代码检查
python3 -m flake8 src/
贡献指南
- Fork 本仓库
- 新建功能分支 (
git checkout -b feature/AmazingFeature) - 提交更改 (
git commit -m 'Add some AmazingFeature') - 推送到分支 (
git push origin feature/AmazingFeature) - 打开 Pull Request
📊 兼容性
| 组件 | 版本/支持 |
|---|---|
| Python | 3.5+ |
| 操作系统 | Linux(主流发行版) |
| 包管理器 | apt, yum, dnf, dpkg, rpm |
📄 许可证
本项目采用 MIT 许可证 - 详见 LICENSE 文件。
👥 作者
liumou
🙏 致谢
感谢所有为这个项目做出贡献的开发者!
📈 版本历史
- v1.0.0 (当前版本)
- 初始版本发布
- 支持在线包管理器 (apt, yum, dnf)
- 支持离线包管理器 (dpkg, rpm)
- 自动检测和统一接口
- 完整的测试覆盖
如果这个项目对你有帮助,请给它一个 ⭐️!
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file plpm_liumou_stable-1.0.2.tar.gz.
File metadata
- Download URL: plpm_liumou_stable-1.0.2.tar.gz
- Upload date:
- Size: 22.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.11.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d81ef9ebf5c04b042d88754ba4dc22ff0041053d887ab4c35d6872f02600671b
|
|
| MD5 |
e5668019c914580e64931bc072c2c774
|
|
| BLAKE2b-256 |
3a42e8559d72638b06b65f9b836a3185721715bc59b3910bb6386d3f316ca4af
|
File details
Details for the file plpm_liumou_stable-1.0.2-py3-none-any.whl.
File metadata
- Download URL: plpm_liumou_stable-1.0.2-py3-none-any.whl
- Upload date:
- Size: 29.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.11.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
0c5938f9333a97e080a2c2c3491d109b76f1995958542aff95a5314335842fd3
|
|
| MD5 |
584c87b1338f00b191c14db6ae0d9abc
|
|
| BLAKE2b-256 |
58a3b83da7d015409f17ad35396122f360ea640de77bceced807efa93b196195
|