plpm-liumou-Stable


Nameplpm-liumou-Stable JSON
Version 1.0.2 PyPI version JSON
download
home_pageNone
SummaryA unified package management interface for Linux distributions
upload_time2025-10-28 16:42:16
maintainerNone
docs_urlNone
authorNone
requires_python>=3.5
licenseMIT
keywords apt dnf dpkg linux management package rpm yum
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # plpm_liumou_Stable

<div align="center">

![PyPI Version](https://img.shields.io/pypi/v/plpm_liumou_Stable.svg)
![PyPI Downloads](https://img.shields.io/pypi/dm/plpm_liumou_Stable.svg)
![Python Version](https://img.shields.io/badge/python-3.5+-blue.svg)
![License](https://img.shields.io/badge/license-MIT-green.svg)
![Platform](https://img.shields.io/badge/platform-linux-lightgrey.svg)

**plpm_liumou_Stable** - 分离的Linux包管理接口

一个为Linux系统提供分离包管理接口的Python库,分别支持在线和离线包管理器。

[English](#english) | [中文](#中文)

</div>

## 🌟 特性

- 🚀 **分离架构**: 提供独立的在线和离线包管理器接口
- 🔍 **自动检测**: 自动识别当前系统的在线和离线包管理器
- 💻 **Python 3.5+ 兼容**: 支持Python 3.5及更高版本
- 📦 **在线包管理**: 支持apt、yum、dnf、apk等在线包管理器,支持更新和升级操作
- 📁 **离线包管理**: 支持dpkg、rpm等离线包管理器,专注于本地包管理
- 🛡️ **错误处理**: 完善的错误处理和异常管理
- 🧪 **完整测试**: 全面的单元测试覆盖

## 📊 项目统计

<div align="center">

| 统计项 | 数据 |
|--------|------|
| **PyPI 项目** | [plpm_liumou_Stable](https://pypi.org/project/plpm_liumou_Stable) |
| **Gitee 项目** | [liumou_site/plpm](https://gitee.com/liumou_site/plpm) |
| **最新版本** | [![PyPI Version](https://img.shields.io/pypi/v/plpm_liumou_Stable.svg)](https://pypi.org/project/plpm_liumou_Stable) |
| **下载量** | [![PyPI Downloads](https://img.shields.io/pypi/dm/plpm_liumou_Stable.svg)](https://pypi.org/project/plpm_liumou_Stable) |
| **Python 版本** | 3.5+ |
| **许可证** | MIT |
| **平台** | Linux |
| **作者邮箱** | liumou.site@qq.com |

</div>

## 📦 安装

### 从PyPI安装

```bash
pip install plpm_liumou_Stable
```

#### 使用国内镜像加速(推荐)

使用清华大学镜像源加速下载:

```bash
pip install plpm_liumou_Stable -i https://pypi.tuna.tsinghua.edu.cn/simple/
```

### 升级到最新版本

当有新版本发布时,可以使用以下命令升级到最新版本:

```bash
pip install --upgrade plpm_liumou_Stable
```

#### 使用国内镜像升级

```bash
pip install --upgrade plpm_liumou_Stable -i https://pypi.tuna.tsinghua.edu.cn/simple/
```

### 卸载包

如果需要卸载plpm_liumou_Stable包,可以使用以下命令:

```bash
pip uninstall plpm_liumou_Stable
```

## 🚀 快速开始

### 基本使用

#### 使用在线包管理器

```python
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("未检测到可用的在线包管理器")
```

#### 使用离线包管理器

```python
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("未检测到可用的离线包管理器")
```

### 使用特定包管理器

```python
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)
```

### 列出可用的包管理器

```python
from plpm import list_available_managers

# 列出系统中可用的包管理器
available = list_available_managers()
print(f"可用的包管理器: {available}")
```

## 📚 API 参考

### OnlinePackageManager 类

专门管理在线包管理器(apt、yum、dnf、apk),支持软件安装、更新、升级等操作。

#### 构造函数

```python
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),支持软件安装、移除、查询等操作。

#### 构造函数

```python
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 | 开发工具管理 |

## 💡 示例

### 批量安装软件包

```python
from plpm import UnifiedPackageManager

manager = UnifiedPackageManager()

if manager.is_manager_available():
    # 批量安装开发工具
    packages = ['git', 'vim', 'curl', 'wget']
    if manager.install(packages):
        print("软件包安装成功")
    else:
        print("软件包安装失败")
```

### 系统维护任务

```python
from plpm import UnifiedPackageManager

manager = UnifiedPackageManager(sudo=True)

if manager.is_manager_available():
    # 更新系统
    manager.update()
    manager.upgrade()
    
    # 清理缓存
    manager.clean_cache()
    
    print("系统维护完成")
```

### 包信息查询

```python
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                # 项目文档
```

## 🧪 测试

### 运行测试

```bash
python3 -m unittest discover tests/ -v
```

### 测试覆盖率

项目包含完整的单元测试,确保代码质量和功能稳定性。

## 🔧 开发

### 代码规范

项目使用以下工具进行代码质量检查:

```bash
# 代码格式化
python3 -m black src/
python3 -m isort src/

# 类型检查
python3 -m mypy src/

# 代码检查
python3 -m flake8 src/
```

### 贡献指南

1. Fork 本仓库
2. 新建功能分支 (`git checkout -b feature/AmazingFeature`)
3. 提交更改 (`git commit -m 'Add some AmazingFeature'`)
4. 推送到分支 (`git push origin feature/AmazingFeature`)
5. 打开 Pull Request

## 📊 兼容性

| 组件 | 版本/支持 |
|------|-----------|
| **Python** | 3.5+ |
| **操作系统** | Linux(主流发行版) |
| **包管理器** | apt, yum, dnf, dpkg, rpm |

## 📄 许可证

本项目采用 MIT 许可证 - 详见 [LICENSE](LICENSE) 文件。

## 👥 作者

**liumou**

- 邮箱: [联系作者](liumou.site@qq.com)
- Gitee: [@liumou](https://gitee.com/liumou_site)

## 🙏 致谢

感谢所有为这个项目做出贡献的开发者!

## 📈 版本历史

- **v1.0.0** (当前版本)
  - 初始版本发布
  - 支持在线包管理器 (apt, yum, dnf)
  - 支持离线包管理器 (dpkg, rpm)
  - 自动检测和统一接口
  - 完整的测试覆盖

---

<div align="center">

**如果这个项目对你有帮助,请给它一个 ⭐️!**

</div>
            

Raw data

            {
    "_id": null,
    "home_page": null,
    "name": "plpm-liumou-Stable",
    "maintainer": null,
    "docs_url": null,
    "requires_python": ">=3.5",
    "maintainer_email": null,
    "keywords": "apt, dnf, dpkg, linux, management, package, rpm, yum",
    "author": null,
    "author_email": "liumou <liumou.site@qq.com>",
    "download_url": "https://files.pythonhosted.org/packages/3a/42/e8559d72638b06b65f9b836a3185721715bc59b3910bb6386d3f316ca4af/plpm_liumou_stable-1.0.2.tar.gz",
    "platform": null,
    "description": "# plpm_liumou_Stable\n\n<div align=\"center\">\n\n![PyPI Version](https://img.shields.io/pypi/v/plpm_liumou_Stable.svg)\n![PyPI Downloads](https://img.shields.io/pypi/dm/plpm_liumou_Stable.svg)\n![Python Version](https://img.shields.io/badge/python-3.5+-blue.svg)\n![License](https://img.shields.io/badge/license-MIT-green.svg)\n![Platform](https://img.shields.io/badge/platform-linux-lightgrey.svg)\n\n**plpm_liumou_Stable** - \u5206\u79bb\u7684Linux\u5305\u7ba1\u7406\u63a5\u53e3\n\n\u4e00\u4e2a\u4e3aLinux\u7cfb\u7edf\u63d0\u4f9b\u5206\u79bb\u5305\u7ba1\u7406\u63a5\u53e3\u7684Python\u5e93\uff0c\u5206\u522b\u652f\u6301\u5728\u7ebf\u548c\u79bb\u7ebf\u5305\u7ba1\u7406\u5668\u3002\n\n[English](#english) | [\u4e2d\u6587](#\u4e2d\u6587)\n\n</div>\n\n## \ud83c\udf1f \u7279\u6027\n\n- \ud83d\ude80 **\u5206\u79bb\u67b6\u6784**: \u63d0\u4f9b\u72ec\u7acb\u7684\u5728\u7ebf\u548c\u79bb\u7ebf\u5305\u7ba1\u7406\u5668\u63a5\u53e3\n- \ud83d\udd0d **\u81ea\u52a8\u68c0\u6d4b**: \u81ea\u52a8\u8bc6\u522b\u5f53\u524d\u7cfb\u7edf\u7684\u5728\u7ebf\u548c\u79bb\u7ebf\u5305\u7ba1\u7406\u5668\n- \ud83d\udcbb **Python 3.5+ \u517c\u5bb9**: \u652f\u6301Python 3.5\u53ca\u66f4\u9ad8\u7248\u672c\n- \ud83d\udce6 **\u5728\u7ebf\u5305\u7ba1\u7406**: \u652f\u6301apt\u3001yum\u3001dnf\u3001apk\u7b49\u5728\u7ebf\u5305\u7ba1\u7406\u5668\uff0c\u652f\u6301\u66f4\u65b0\u548c\u5347\u7ea7\u64cd\u4f5c\n- \ud83d\udcc1 **\u79bb\u7ebf\u5305\u7ba1\u7406**: \u652f\u6301dpkg\u3001rpm\u7b49\u79bb\u7ebf\u5305\u7ba1\u7406\u5668\uff0c\u4e13\u6ce8\u4e8e\u672c\u5730\u5305\u7ba1\u7406\n- \ud83d\udee1\ufe0f **\u9519\u8bef\u5904\u7406**: \u5b8c\u5584\u7684\u9519\u8bef\u5904\u7406\u548c\u5f02\u5e38\u7ba1\u7406\n- \ud83e\uddea **\u5b8c\u6574\u6d4b\u8bd5**: \u5168\u9762\u7684\u5355\u5143\u6d4b\u8bd5\u8986\u76d6\n\n## \ud83d\udcca \u9879\u76ee\u7edf\u8ba1\n\n<div align=\"center\">\n\n| \u7edf\u8ba1\u9879 | \u6570\u636e |\n|--------|------|\n| **PyPI \u9879\u76ee** | [plpm_liumou_Stable](https://pypi.org/project/plpm_liumou_Stable) |\n| **Gitee \u9879\u76ee** | [liumou_site/plpm](https://gitee.com/liumou_site/plpm) |\n| **\u6700\u65b0\u7248\u672c** | [![PyPI Version](https://img.shields.io/pypi/v/plpm_liumou_Stable.svg)](https://pypi.org/project/plpm_liumou_Stable) |\n| **\u4e0b\u8f7d\u91cf** | [![PyPI Downloads](https://img.shields.io/pypi/dm/plpm_liumou_Stable.svg)](https://pypi.org/project/plpm_liumou_Stable) |\n| **Python \u7248\u672c** | 3.5+ |\n| **\u8bb8\u53ef\u8bc1** | MIT |\n| **\u5e73\u53f0** | Linux |\n| **\u4f5c\u8005\u90ae\u7bb1** | liumou.site@qq.com |\n\n</div>\n\n## \ud83d\udce6 \u5b89\u88c5\n\n### \u4ecePyPI\u5b89\u88c5\n\n```bash\npip install plpm_liumou_Stable\n```\n\n#### \u4f7f\u7528\u56fd\u5185\u955c\u50cf\u52a0\u901f\uff08\u63a8\u8350\uff09\n\n\u4f7f\u7528\u6e05\u534e\u5927\u5b66\u955c\u50cf\u6e90\u52a0\u901f\u4e0b\u8f7d\uff1a\n\n```bash\npip install plpm_liumou_Stable -i https://pypi.tuna.tsinghua.edu.cn/simple/\n```\n\n### \u5347\u7ea7\u5230\u6700\u65b0\u7248\u672c\n\n\u5f53\u6709\u65b0\u7248\u672c\u53d1\u5e03\u65f6\uff0c\u53ef\u4ee5\u4f7f\u7528\u4ee5\u4e0b\u547d\u4ee4\u5347\u7ea7\u5230\u6700\u65b0\u7248\u672c\uff1a\n\n```bash\npip install --upgrade plpm_liumou_Stable\n```\n\n#### \u4f7f\u7528\u56fd\u5185\u955c\u50cf\u5347\u7ea7\n\n```bash\npip install --upgrade plpm_liumou_Stable -i https://pypi.tuna.tsinghua.edu.cn/simple/\n```\n\n### \u5378\u8f7d\u5305\n\n\u5982\u679c\u9700\u8981\u5378\u8f7dplpm_liumou_Stable\u5305\uff0c\u53ef\u4ee5\u4f7f\u7528\u4ee5\u4e0b\u547d\u4ee4\uff1a\n\n```bash\npip uninstall plpm_liumou_Stable\n```\n\n## \ud83d\ude80 \u5feb\u901f\u5f00\u59cb\n\n### \u57fa\u672c\u4f7f\u7528\n\n#### \u4f7f\u7528\u5728\u7ebf\u5305\u7ba1\u7406\u5668\n\n```python\nfrom plpm import OnlinePackageManager\n\n# \u521b\u5efa\u5728\u7ebf\u5305\u7ba1\u7406\u5668\u5b9e\u4f8b\uff08\u81ea\u52a8\u68c0\u6d4b\u7cfb\u7edf\u5728\u7ebf\u5305\u7ba1\u7406\u5668\uff09\nmanager = OnlinePackageManager()\n\n# \u68c0\u67e5\u662f\u5426\u6709\u53ef\u7528\u7684\u5728\u7ebf\u5305\u7ba1\u7406\u5668\nif manager.is_manager_available():\n    print(f\"\u68c0\u6d4b\u5230\u5728\u7ebf\u5305\u7ba1\u7406\u5668: {manager.get_manager_name()}\")\n    \n    # \u66f4\u65b0\u5305\u5217\u8868\n    manager.update()\n    \n    # \u641c\u7d22\u5305\n    packages = manager.search(\"python\")\n    print(f\"\u627e\u5230 {len(packages)} \u4e2a\u76f8\u5173\u5305\")\n    \n    # \u5217\u51fa\u5df2\u5b89\u88c5\u7684\u5305\n    installed = manager.list_installed()\n    print(f\"\u5df2\u5b89\u88c5 {len(installed)} \u4e2a\u5305\")\n    \n    # \u68c0\u67e5\u7279\u5b9a\u5305\u662f\u5426\u5df2\u5b89\u88c5\n    if manager.installed(\"python3\"):\n        print(\"python3 \u5df2\u5b89\u88c5\")\n    else:\n        print(\"python3 \u672a\u5b89\u88c5\")\n    \n    # \u7cfb\u7edf\u5347\u7ea7\n    manager.upgrade()\nelse:\n    print(\"\u672a\u68c0\u6d4b\u5230\u53ef\u7528\u7684\u5728\u7ebf\u5305\u7ba1\u7406\u5668\")\n```\n\n#### \u4f7f\u7528\u79bb\u7ebf\u5305\u7ba1\u7406\u5668\n\n```python\nfrom plpm import OfflinePackageManager\n\n# \u521b\u5efa\u79bb\u7ebf\u5305\u7ba1\u7406\u5668\u5b9e\u4f8b\uff08\u81ea\u52a8\u68c0\u6d4b\u7cfb\u7edf\u79bb\u7ebf\u5305\u7ba1\u7406\u5668\uff09\nmanager = OfflinePackageManager()\n\n# \u68c0\u67e5\u662f\u5426\u6709\u53ef\u7528\u7684\u79bb\u7ebf\u5305\u7ba1\u7406\u5668\nif manager.is_manager_available():\n    print(f\"\u68c0\u6d4b\u5230\u79bb\u7ebf\u5305\u7ba1\u7406\u5668: {manager.get_manager_name()}\")\n    \n    # \u641c\u7d22\u5305\n    packages = manager.search(\"python\")\n    print(f\"\u627e\u5230 {len(packages)} \u4e2a\u76f8\u5173\u5305\")\n    \n    # \u5217\u51fa\u5df2\u5b89\u88c5\u7684\u5305\n    installed = manager.list_installed()\n    print(f\"\u5df2\u5b89\u88c5 {len(installed)} \u4e2a\u5305\")\n    \n    # \u68c0\u67e5\u7279\u5b9a\u5305\u662f\u5426\u5df2\u5b89\u88c5\n    if manager.installed(\"python3\"):\n        print(\"python3 \u5df2\u5b89\u88c5\")\n    else:\n        print(\"python3 \u672a\u5b89\u88c5\")\n    \n    # \u6ce8\u610f\uff1a\u79bb\u7ebf\u5305\u7ba1\u7406\u5668\u4e0d\u652f\u6301update\u548cupgrade\u64cd\u4f5c\n    print(\"\u79bb\u7ebf\u5305\u7ba1\u7406\u5668\u4e0d\u652f\u6301\u7cfb\u7edf\u66f4\u65b0\u548c\u5347\u7ea7\u64cd\u4f5c\")\nelse:\n    print(\"\u672a\u68c0\u6d4b\u5230\u53ef\u7528\u7684\u79bb\u7ebf\u5305\u7ba1\u7406\u5668\")\n```\n\n### \u4f7f\u7528\u7279\u5b9a\u5305\u7ba1\u7406\u5668\n\n```python\nfrom plpm import get_package_manager\n\n# \u83b7\u53d6\u7279\u5b9a\u7684\u5305\u7ba1\u7406\u5668\napt_manager = get_package_manager(manager_name='apt')\n\nif apt_manager and apt_manager.is_available():\n    # \u5b89\u88c5\u5305\n    apt_manager.install(['curl', 'wget'])\n    \n    # \u83b7\u53d6\u5305\u4fe1\u606f\n    info = apt_manager.info('python3')\n    print(info)\n```\n\n### \u5217\u51fa\u53ef\u7528\u7684\u5305\u7ba1\u7406\u5668\n\n```python\nfrom plpm import list_available_managers\n\n# \u5217\u51fa\u7cfb\u7edf\u4e2d\u53ef\u7528\u7684\u5305\u7ba1\u7406\u5668\navailable = list_available_managers()\nprint(f\"\u53ef\u7528\u7684\u5305\u7ba1\u7406\u5668: {available}\")\n```\n\n## \ud83d\udcda API \u53c2\u8003\n\n### OnlinePackageManager \u7c7b\n\n\u4e13\u95e8\u7ba1\u7406\u5728\u7ebf\u5305\u7ba1\u7406\u5668\uff08apt\u3001yum\u3001dnf\u3001apk\uff09\uff0c\u652f\u6301\u8f6f\u4ef6\u5b89\u88c5\u3001\u66f4\u65b0\u3001\u5347\u7ea7\u7b49\u64cd\u4f5c\u3002\n\n#### \u6784\u9020\u51fd\u6570\n\n```python\nOnlinePackageManager(sudo=False, preferred_manager=None)\n```\n\n- `sudo`: \u662f\u5426\u4f7f\u7528sudo\u6267\u884c\u7279\u6743\u64cd\u4f5c\uff08\u9ed8\u8ba4False\uff09\n- `preferred_manager`: \u4f18\u5148\u4f7f\u7528\u7684\u5728\u7ebf\u5305\u7ba1\u7406\u5668\u540d\u79f0\uff08'apt', 'yum', 'dnf', 'apk'\uff09\n\n#### \u4e3b\u8981\u65b9\u6cd5\n\n| \u65b9\u6cd5 | \u63cf\u8ff0 | \u8fd4\u56de\u503c |\n|------|------|--------|\n| `install(packages)` | \u5b89\u88c5\u5305 | bool |\n| `remove(packages)` | \u79fb\u9664\u5305 | bool |\n| `update()` | \u66f4\u65b0\u5305\u5217\u8868 | bool |\n| `upgrade(packages=None)` | \u5347\u7ea7\u5305 | bool |\n| `search(pattern)` | \u641c\u7d22\u5305 | list |\n| `info(package)` | \u83b7\u53d6\u5305\u4fe1\u606f | dict |\n| `list_installed()` | \u5217\u51fa\u5df2\u5b89\u88c5\u7684\u5305 | list |\n| `installed(package)` | \u68c0\u67e5\u6307\u5b9a\u5305\u662f\u5426\u5df2\u5b89\u88c5 | bool |\n| `clean_cache()` | \u6e05\u7406\u5305\u7f13\u5b58 | bool |\n| `autoremove()` | \u81ea\u52a8\u79fb\u9664\u4e0d\u9700\u8981\u7684\u5305 | bool |\n\n### OfflinePackageManager \u7c7b\n\n\u4e13\u95e8\u7ba1\u7406\u79bb\u7ebf\u5305\u7ba1\u7406\u5668\uff08dpkg\u3001rpm\uff09\uff0c\u652f\u6301\u8f6f\u4ef6\u5b89\u88c5\u3001\u79fb\u9664\u3001\u67e5\u8be2\u7b49\u64cd\u4f5c\u3002\n\n#### \u6784\u9020\u51fd\u6570\n\n```python\nOfflinePackageManager(sudo=False, preferred_manager=None)\n```\n\n- `sudo`: \u662f\u5426\u4f7f\u7528sudo\u6267\u884c\u7279\u6743\u64cd\u4f5c\uff08\u9ed8\u8ba4False\uff09\n- `preferred_manager`: \u4f18\u5148\u4f7f\u7528\u7684\u79bb\u7ebf\u5305\u7ba1\u7406\u5668\u540d\u79f0\uff08'dpkg', 'rpm'\uff09\n\n#### \u4e3b\u8981\u65b9\u6cd5\n\n| \u65b9\u6cd5 | \u63cf\u8ff0 | \u8fd4\u56de\u503c |\n|------|------|--------|\n| `install(packages)` | \u5b89\u88c5\u5305 | bool |\n| `remove(packages)` | \u79fb\u9664\u5305 | bool |\n| `search(pattern)` | \u641c\u7d22\u5305 | list |\n| `info(package)` | \u83b7\u53d6\u5305\u4fe1\u606f | dict |\n| `list_installed()` | \u5217\u51fa\u5df2\u5b89\u88c5\u7684\u5305 | list |\n| `installed(package)` | \u68c0\u67e5\u6307\u5b9a\u5305\u662f\u5426\u5df2\u5b89\u88c5 | bool |\n| `verify(package)` | \u9a8c\u8bc1\u5305\u5b8c\u6574\u6027 | bool |\n| `install_from_file(file_path)` | \u4ece\u672c\u5730\u6587\u4ef6\u5b89\u88c5\u5305 | bool |\n\n**\u6ce8\u610f**: \u79bb\u7ebf\u5305\u7ba1\u7406\u5668\u4e0d\u652f\u6301 `update()` \u548c `upgrade()` \u65b9\u6cd5\uff0c\u56e0\u4e3a\u8fd9\u4e9b\u64cd\u4f5c\u9700\u8981\u7f51\u7edc\u8fde\u63a5\u3002\n\n### \u5de5\u5177\u51fd\u6570\n\n- `get_package_manager(sudo=False, manager_name=None)`: \u83b7\u53d6\u7279\u5b9a\u5305\u7ba1\u7406\u5668\u5b9e\u4f8b\n- `list_available_managers()`: \u5217\u51fa\u53ef\u7528\u7684\u5305\u7ba1\u7406\u5668\n- `detect_online_package_manager()`: \u81ea\u52a8\u68c0\u6d4b\u5728\u7ebf\u5305\u7ba1\u7406\u5668\n- `detect_offline_package_manager()`: \u81ea\u52a8\u68c0\u6d4b\u79bb\u7ebf\u5305\u7ba1\u7406\u5668\n\n## \ud83d\udee0\ufe0f \u652f\u6301\u7684\u5305\u7ba1\u7406\u5668\n\n### \u5728\u7ebf\u5305\u7ba1\u7406\u5668\n\n| \u7ba1\u7406\u5668 | \u7cfb\u7edf | \u547d\u4ee4 | \u7279\u70b9 |\n|--------|------|------|------|\n| **AptManager** | Debian/Ubuntu | apt-get, apt-cache | \u4f9d\u8d56\u5173\u7cfb\u5904\u7406\u4f18\u79c0\uff0c\u7528\u6237\u53cb\u597d |\n| **YumManager** | CentOS/RHEL | yum | \u4f01\u4e1a\u7ea7\u7a33\u5b9a\uff0c\u81ea\u52a8\u4f9d\u8d56\u89e3\u51b3 |\n| **DnfManager** | Fedora | dnf | YUM\u73b0\u4ee3\u5316\u66ff\u4ee3\uff0c\u6027\u80fd\u66f4\u597d |\n| **ApkManager** | Alpine Linux | apk | \u8f7b\u91cf\u7ea7\uff0c\u9002\u5408\u5bb9\u5668\u73af\u5883 |\n\n### \u79bb\u7ebf\u5305\u7ba1\u7406\u5668\n\n| \u7ba1\u7406\u5668 | \u7cfb\u7edf | \u547d\u4ee4 | \u7279\u70b9 |\n|--------|------|------|------|\n| **DpkgManager** | Debian/Ubuntu | dpkg | \u5e95\u5c42\u5305\u7ba1\u7406\uff0c\u4e0d\u5904\u7406\u4f9d\u8d56 |\n| **RpmManager** | Red Hat | rpm | \u5e95\u5c42\u5305\u7ba1\u7406\uff0c\u4f01\u4e1a\u7ea7\u6807\u51c6 |\n\n### \u5176\u4ed6\u5e38\u89c1Linux\u5305\u7ba1\u7406\u5668\n\n| \u7ba1\u7406\u5668 | \u7cfb\u7edf | \u7c7b\u578b | \u7279\u70b9 |\n|--------|------|------|------|\n| **Pacman** | Arch Linux/Manjaro | \u5728\u7ebf | \u7b80\u5355\u9ad8\u6548\uff0c\u6eda\u52a8\u66f4\u65b0 |\n| **Zypper** | openSUSE/SUSE | \u5728\u7ebf | \u4f01\u4e1a\u7ea7\u529f\u80fd\uff0c\u7a33\u5b9a\u53ef\u9760 |\n| **Portage** | Gentoo Linux | \u6e90\u7801\u7f16\u8bd1 | \u9ad8\u5ea6\u5b9a\u5236\uff0c\u6027\u80fd\u4f18\u5316 |\n| **Snap** | \u8de8\u53d1\u884c\u7248 | \u5bb9\u5668\u5316 | \u6c99\u76d2\u5b89\u5168\uff0c\u5e94\u7528\u9694\u79bb |\n| **Flatpak** | \u8de8\u53d1\u884c\u7248 | \u5bb9\u5668\u5316 | \u73b0\u4ee3\u5e94\u7528\u5206\u53d1\u6807\u51c6 |\n| **Homebrew** | Linux/macOS | \u7528\u6237\u7ea7 | \u65e0\u9700root\u6743\u9650 |\n\n### \u5305\u7ba1\u7406\u5668\u5206\u7c7b\u603b\u7ed3\n\n| \u5206\u7c7b | \u5305\u7ba1\u7406\u5668 | \u4e3b\u8981\u7528\u9014 |\n|------|----------|----------|\n| **\u4f20\u7edf\u5728\u7ebf\u5305\u7ba1\u7406** | APT, YUM, DNF, APK | \u7cfb\u7edf\u7ea7\u8f6f\u4ef6\u5b89\u88c5\u548c\u66f4\u65b0 |\n| **\u5e95\u5c42\u5305\u7ba1\u7406** | DPKG, RPM | \u57fa\u7840\u5305\u5b89\u88c5\u548c\u67e5\u8be2 |\n| **\u6eda\u52a8\u66f4\u65b0** | Pacman | \u6700\u65b0\u8f6f\u4ef6\u4f53\u9a8c |\n| **\u4f01\u4e1a\u7ea7** | Zypper | \u5546\u4e1a\u73af\u5883\u652f\u6301 |\n| **\u6e90\u7801\u7f16\u8bd1** | Portage | \u9ad8\u5ea6\u5b9a\u5236\u5316 |\n| **\u73b0\u4ee3\u5e94\u7528\u5206\u53d1** | Snap, Flatpak | \u8de8\u53d1\u884c\u7248\u5e94\u7528 |\n| **\u7528\u6237\u7ea7\u7ba1\u7406** | Homebrew | \u5f00\u53d1\u5de5\u5177\u7ba1\u7406 |\n\n## \ud83d\udca1 \u793a\u4f8b\n\n### \u6279\u91cf\u5b89\u88c5\u8f6f\u4ef6\u5305\n\n```python\nfrom plpm import UnifiedPackageManager\n\nmanager = UnifiedPackageManager()\n\nif manager.is_manager_available():\n    # \u6279\u91cf\u5b89\u88c5\u5f00\u53d1\u5de5\u5177\n    packages = ['git', 'vim', 'curl', 'wget']\n    if manager.install(packages):\n        print(\"\u8f6f\u4ef6\u5305\u5b89\u88c5\u6210\u529f\")\n    else:\n        print(\"\u8f6f\u4ef6\u5305\u5b89\u88c5\u5931\u8d25\")\n```\n\n### \u7cfb\u7edf\u7ef4\u62a4\u4efb\u52a1\n\n```python\nfrom plpm import UnifiedPackageManager\n\nmanager = UnifiedPackageManager(sudo=True)\n\nif manager.is_manager_available():\n    # \u66f4\u65b0\u7cfb\u7edf\n    manager.update()\n    manager.upgrade()\n    \n    # \u6e05\u7406\u7f13\u5b58\n    manager.clean_cache()\n    \n    print(\"\u7cfb\u7edf\u7ef4\u62a4\u5b8c\u6210\")\n```\n\n### \u5305\u4fe1\u606f\u67e5\u8be2\n\n```python\nfrom plpm import UnifiedPackageManager\n\nmanager = UnifiedPackageManager()\n\nif manager.is_manager_available():\n    # \u641c\u7d22Python\u76f8\u5173\u5305\n    python_packages = manager.search(\"python\")\n    \n    for pkg in python_packages[:5]:  # \u663e\u793a\u524d5\u4e2a\u7ed3\u679c\n        info = manager.info(pkg['name'])\n        print(f\"\u5305\u540d: {pkg['name']}\")\n        print(f\"\u7248\u672c: {pkg.get('version', 'N/A')}\")\n        print(f\"\u63cf\u8ff0: {pkg.get('description', 'N/A')}\")\n        print(\"-\" * 50)\n```\n\n## \ud83c\udfd7\ufe0f \u9879\u76ee\u7ed3\u6784\n\n```\nplpm_liumou_Stable/\n\u251c\u2500\u2500 src/plpm/\n\u2502   \u251c\u2500\u2500 __init__.py          # \u5305\u5165\u53e3\u548c\u4e3b\u8981\u63a5\u53e3\n\u2502   \u251c\u2500\u2500 core.py              # \u6838\u5fc3\u62bd\u8c61\u7c7b\u548c\u57fa\u7840\u529f\u80fd\n\u2502   \u251c\u2500\u2500 online/               # \u5728\u7ebf\u5305\u7ba1\u7406\u5668\u5b9e\u73b0\n\u2502   \u2502   \u251c\u2500\u2500 __init__.py\n\u2502   \u2502   \u251c\u2500\u2500 apt.py           # apt\u5305\u7ba1\u7406\u5668\n\u2502   \u2502   \u251c\u2500\u2500 yum.py           # yum\u5305\u7ba1\u7406\u5668\n\u2502   \u2502   \u251c\u2500\u2500 dnf.py           # dnf\u5305\u7ba1\u7406\u5668\n\u2502   \u2502   \u2514\u2500\u2500 apk.py           # apk\u5305\u7ba1\u7406\u5668\n\u2502   \u251c\u2500\u2500 offline/             # \u79bb\u7ebf\u5305\u7ba1\u7406\u5668\u5b9e\u73b0\n\u2502   \u2502   \u251c\u2500\u2500 __init__.py\n\u2502   \u2502   \u251c\u2500\u2500 dpkg.py          # dpkg\u5305\u7ba1\u7406\u5668\n\u2502   \u2502   \u2514\u2500\u2500 rpm.py           # rpm\u5305\u7ba1\u7406\u5668\n\u2502   \u2514\u2500\u2500 unified.py           # \u5728\u7ebf\u548c\u79bb\u7ebf\u5305\u7ba1\u7406\u5668\u63a5\u53e3\n\u251c\u2500\u2500 tests/                    # \u6d4b\u8bd5\u6587\u4ef6\n\u2502   \u251c\u2500\u2500 __init__.py\n\u2502   \u251c\u2500\u2500 test_core.py         # \u6838\u5fc3\u529f\u80fd\u6d4b\u8bd5\n\u2502   \u2514\u2500\u2500 test_unified.py      # \u5728\u7ebf\u548c\u79bb\u7ebf\u63a5\u53e3\u6d4b\u8bd5\n\u251c\u2500\u2500 pyproject.toml            # \u9879\u76ee\u914d\u7f6e\n\u2514\u2500\u2500 README.md                # \u9879\u76ee\u6587\u6863\n```\n\n## \ud83e\uddea \u6d4b\u8bd5\n\n### \u8fd0\u884c\u6d4b\u8bd5\n\n```bash\npython3 -m unittest discover tests/ -v\n```\n\n### \u6d4b\u8bd5\u8986\u76d6\u7387\n\n\u9879\u76ee\u5305\u542b\u5b8c\u6574\u7684\u5355\u5143\u6d4b\u8bd5\uff0c\u786e\u4fdd\u4ee3\u7801\u8d28\u91cf\u548c\u529f\u80fd\u7a33\u5b9a\u6027\u3002\n\n## \ud83d\udd27 \u5f00\u53d1\n\n### \u4ee3\u7801\u89c4\u8303\n\n\u9879\u76ee\u4f7f\u7528\u4ee5\u4e0b\u5de5\u5177\u8fdb\u884c\u4ee3\u7801\u8d28\u91cf\u68c0\u67e5\uff1a\n\n```bash\n# \u4ee3\u7801\u683c\u5f0f\u5316\npython3 -m black src/\npython3 -m isort src/\n\n# \u7c7b\u578b\u68c0\u67e5\npython3 -m mypy src/\n\n# \u4ee3\u7801\u68c0\u67e5\npython3 -m flake8 src/\n```\n\n### \u8d21\u732e\u6307\u5357\n\n1. Fork \u672c\u4ed3\u5e93\n2. \u65b0\u5efa\u529f\u80fd\u5206\u652f (`git checkout -b feature/AmazingFeature`)\n3. \u63d0\u4ea4\u66f4\u6539 (`git commit -m 'Add some AmazingFeature'`)\n4. \u63a8\u9001\u5230\u5206\u652f (`git push origin feature/AmazingFeature`)\n5. \u6253\u5f00 Pull Request\n\n## \ud83d\udcca \u517c\u5bb9\u6027\n\n| \u7ec4\u4ef6 | \u7248\u672c/\u652f\u6301 |\n|------|-----------|\n| **Python** | 3.5+ |\n| **\u64cd\u4f5c\u7cfb\u7edf** | Linux\uff08\u4e3b\u6d41\u53d1\u884c\u7248\uff09 |\n| **\u5305\u7ba1\u7406\u5668** | apt, yum, dnf, dpkg, rpm |\n\n## \ud83d\udcc4 \u8bb8\u53ef\u8bc1\n\n\u672c\u9879\u76ee\u91c7\u7528 MIT \u8bb8\u53ef\u8bc1 - \u8be6\u89c1 [LICENSE](LICENSE) \u6587\u4ef6\u3002\n\n## \ud83d\udc65 \u4f5c\u8005\n\n**liumou**\n\n- \u90ae\u7bb1: [\u8054\u7cfb\u4f5c\u8005](liumou.site@qq.com)\n- Gitee: [@liumou](https://gitee.com/liumou_site)\n\n## \ud83d\ude4f \u81f4\u8c22\n\n\u611f\u8c22\u6240\u6709\u4e3a\u8fd9\u4e2a\u9879\u76ee\u505a\u51fa\u8d21\u732e\u7684\u5f00\u53d1\u8005\uff01\n\n## \ud83d\udcc8 \u7248\u672c\u5386\u53f2\n\n- **v1.0.0** (\u5f53\u524d\u7248\u672c)\n  - \u521d\u59cb\u7248\u672c\u53d1\u5e03\n  - \u652f\u6301\u5728\u7ebf\u5305\u7ba1\u7406\u5668 (apt, yum, dnf)\n  - \u652f\u6301\u79bb\u7ebf\u5305\u7ba1\u7406\u5668 (dpkg, rpm)\n  - \u81ea\u52a8\u68c0\u6d4b\u548c\u7edf\u4e00\u63a5\u53e3\n  - \u5b8c\u6574\u7684\u6d4b\u8bd5\u8986\u76d6\n\n---\n\n<div align=\"center\">\n\n**\u5982\u679c\u8fd9\u4e2a\u9879\u76ee\u5bf9\u4f60\u6709\u5e2e\u52a9\uff0c\u8bf7\u7ed9\u5b83\u4e00\u4e2a \u2b50\ufe0f\uff01**\n\n</div>",
    "bugtrack_url": null,
    "license": "MIT",
    "summary": "A unified package management interface for Linux distributions",
    "version": "1.0.2",
    "project_urls": {
        "Documentation": "https://plpm.readthedocs.io",
        "Homepage": "https://github.com/liumou/plpm",
        "Issues": "https://github.com/liumou/plpm/issues",
        "Repository": "https://github.com/liumou/plpm"
    },
    "split_keywords": [
        "apt",
        " dnf",
        " dpkg",
        " linux",
        " management",
        " package",
        " rpm",
        " yum"
    ],
    "urls": [
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "58a3b83da7d015409f17ad35396122f360ea640de77bceced807efa93b196195",
                "md5": "584c87b1338f00b191c14db6ae0d9abc",
                "sha256": "0c5938f9333a97e080a2c2c3491d109b76f1995958542aff95a5314335842fd3"
            },
            "downloads": -1,
            "filename": "plpm_liumou_stable-1.0.2-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "584c87b1338f00b191c14db6ae0d9abc",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.5",
            "size": 29103,
            "upload_time": "2025-10-28T16:42:13",
            "upload_time_iso_8601": "2025-10-28T16:42:13.896482Z",
            "url": "https://files.pythonhosted.org/packages/58/a3/b83da7d015409f17ad35396122f360ea640de77bceced807efa93b196195/plpm_liumou_stable-1.0.2-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "3a42e8559d72638b06b65f9b836a3185721715bc59b3910bb6386d3f316ca4af",
                "md5": "e5668019c914580e64931bc072c2c774",
                "sha256": "d81ef9ebf5c04b042d88754ba4dc22ff0041053d887ab4c35d6872f02600671b"
            },
            "downloads": -1,
            "filename": "plpm_liumou_stable-1.0.2.tar.gz",
            "has_sig": false,
            "md5_digest": "e5668019c914580e64931bc072c2c774",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.5",
            "size": 22863,
            "upload_time": "2025-10-28T16:42:16",
            "upload_time_iso_8601": "2025-10-28T16:42:16.446954Z",
            "url": "https://files.pythonhosted.org/packages/3a/42/e8559d72638b06b65f9b836a3185721715bc59b3910bb6386d3f316ca4af/plpm_liumou_stable-1.0.2.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2025-10-28 16:42:16",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "liumou",
    "github_project": "plpm",
    "github_not_found": true,
    "lcname": "plpm-liumou-stable"
}
        
Elapsed time: 1.59716s