feat(deps): 实现依赖包智能别名解析

引入了依赖包智能别名解析机制,以解决 Python 生态中常见的安装名与导入名不一致的问题(如 `beautifulsoup4` -> `bs4`)。

当通过包名直接导入失败时,依赖管理器会自动查询一个内置的别名映射表,并尝试使用别名再次导入。这大大提升了开发者在定义简单字符串格式依赖时的体验,减少了因名称不一致导致的依赖检查失败。

同时,更新了相关文档,详细说明了该功能的工作原理、解决了什么问题,并更新了最佳实践。
This commit is contained in:
minecraft1024a
2025-08-18 13:48:55 +08:00
parent d43d352ca5
commit 22f6cd2d94
3 changed files with 226 additions and 44 deletions

View File

@@ -165,10 +165,38 @@ configure_dependency_settings(auto_install_timeout=600)
## 工作流程
1. **插件初始化**: 当插件类被实例化时,系统自动检查依赖
2. **依赖标准化**: 将字符串格式的依赖转换为PythonDependency对象
2. **依赖标准化**: 将字符串格式的依赖转换为`PythonDependency`对象
3. **检查已安装**: 尝试导入每个依赖包并检查版本
4. **自动安装**: 如果启用,自动安装缺失的依赖
5. **错误处理**: 记录详细的错误信息和安装日志
4. **智能别名解析 (新增)**: 如果直接导入失败 (例如 `import beautifulsoup4` 失败),系统会查询内置的别名映射表 (例如 `beautifulsoup4` -> `bs4`),并尝试使用别名再次导入。
5. **自动安装**: 如果启用,自动安装缺失的依赖
6. **错误处理**: 记录详细的错误信息和安装日志
## 智能别名解析 (Smart Alias Resolution)
为了提升开发体验,依赖管理系统内置了一套智能别名解析机制。
### 解决的问题
Python生态中存在一些特殊的包它们的**安装名** (在 `pip install` 中使用) 与**导入名** (在 `import` 语句中使用) 不一致。最典型的例子就是:
- 安装名: `beautifulsoup4`, 导入名: `bs4`
- 安装名: `Pillow`, 导入名: `PIL`
- 安装名: `scikit-learn`, 导入名: `sklearn`
如果开发者在 `python_dependencies` 列表中使用简单的字符串格式 `"beautifulsoup4"`,标准的依赖检查会因为无法 `import beautifulsoup4` 而失败。
### 工作原理
当依赖管理器通过包名直接导入失败时,它会:
1. 查询一个内置的、包含上百个常见包的别名映射表。
2. 如果在表中找到对应的导入名,则使用该别名再次尝试导入。
3. 如果使用别名导入成功,则依赖检查通过,并继续进行版本验证。
这个过程是自动的,旨在处理绝大多数常见情况,减少开发者手动配置的麻烦。
### 注意事项
- **最佳实践**: 尽管有智能别名解析,我们仍然**强烈推荐**使用 `PythonDependency` 对象来明确指定 `package_name` (导入名) 和 `install_name` (安装名),这能确保最高的准确性和可读性。
- **覆盖范围**: 内置的别名映射表涵盖了大量常用库但无法保证100%覆盖所有情况。如果遇到别名库未收录的包,请使用 `PythonDependency` 对象进行精确定义。
## 日志输出示例
@@ -192,12 +220,13 @@ configure_dependency_settings(auto_install_timeout=600)
## 最佳实践
1. **使用详细的PythonDependency对象** 以获得更好的控制和文档
2. **配置PyPI镜像源** 特别是在中国大陆地区,可显著提升下载速度
3. **合理设置可选依赖** 避免非核心功能阻止插件加载
4. **指定版本要求** 确保兼容性
5. **添加描述信息** 帮助用户理解依赖的用途
6. **测试依赖配置** 在不同环境中验证依赖是否正确
1. **优先使用`PythonDependency`对象**: 这是最可靠、最明确的方式,尤其是在安装名和导入名不同时。
2. **利用智能别名解析**: 对于常见的、安装名与导入名不一致的包 (如 `beautifulsoup4`, `Pillow` 等),可以直接在字符串列表里使用安装名,系统会自动解析。
3. **配置PyPI镜像源**: 特别是在中国大陆地区,可显著提升下载速度。
4. **合理设置可选依赖**: 避免非核心功能阻止插件加载。
5. **指定版本要求**: 确保兼容性。
6. **添加描述信息**: 帮助用户理解依赖的用途。
7. **测试依赖配置**: 在不同环境中验证依赖是否正确。
## 安全考虑
@@ -225,7 +254,8 @@ configure_dependency_settings(auto_install_timeout=600)
### 导入错误
1. 确认包名与导入名一致
2. 检查可选依赖配置
3. 验证安装是否成功
1. **确认包名与导入名**: 检查安装名和导入名是否一致。如果不一致,推荐使用 `PythonDependency` 对象明确指定 `package_name``install_name`
2. **利用自动别名解析**: 对于常见库,系统会自动尝试解析别名。如果你的库比较冷门且名称不一致,请使用 `PythonDependency` 对象。
3. **检查可选依赖配置**: 确认 `optional=True` 是否被正确设置。
4. **验证安装是否成功**: 查看日志,确认 `pip install` 过程没有报错。