更新依赖管理配置,新增使用PyPI镜像源的选项以加速包下载,优化文档以清晰描述镜像源和代理设置,调整相关代码以支持新的配置项。
This commit is contained in:
@@ -75,7 +75,11 @@ auto_install = true
|
|||||||
# 安装超时时间(秒)
|
# 安装超时时间(秒)
|
||||||
auto_install_timeout = 300
|
auto_install_timeout = 300
|
||||||
|
|
||||||
# 是否使用代理
|
# 是否使用PyPI镜像源(推荐,可加速下载)
|
||||||
|
use_mirror = true
|
||||||
|
mirror_url = "https://pypi.tuna.tsinghua.edu.cn/simple"
|
||||||
|
|
||||||
|
# 是否使用网络代理(高级选项)
|
||||||
use_proxy = false
|
use_proxy = false
|
||||||
proxy_url = ""
|
proxy_url = ""
|
||||||
|
|
||||||
@@ -92,18 +96,44 @@ prompt_before_install = false
|
|||||||
install_log_level = "INFO"
|
install_log_level = "INFO"
|
||||||
```
|
```
|
||||||
|
|
||||||
## 代理配置
|
## PyPI镜像源配置(推荐)
|
||||||
|
|
||||||
如果需要通过代理安装包,可以配置:
|
使用PyPI镜像源可以显著加速包的下载,特别是在中国大陆地区:
|
||||||
|
|
||||||
|
```toml
|
||||||
|
[dependency_management]
|
||||||
|
use_mirror = true
|
||||||
|
mirror_url = "https://pypi.tuna.tsinghua.edu.cn/simple" # 清华大学镜像源
|
||||||
|
```
|
||||||
|
|
||||||
|
### 常用的国内镜像源
|
||||||
|
|
||||||
|
```toml
|
||||||
|
# 清华大学镜像源(推荐)
|
||||||
|
mirror_url = "https://pypi.tuna.tsinghua.edu.cn/simple"
|
||||||
|
|
||||||
|
# 阿里云镜像源
|
||||||
|
mirror_url = "https://mirrors.aliyun.com/pypi/simple"
|
||||||
|
|
||||||
|
# 中科大镜像源
|
||||||
|
mirror_url = "https://pypi.mirrors.ustc.edu.cn/simple"
|
||||||
|
|
||||||
|
# 豆瓣镜像源
|
||||||
|
mirror_url = "https://pypi.douban.com/simple"
|
||||||
|
```
|
||||||
|
|
||||||
|
## 网络代理配置(高级选项)
|
||||||
|
|
||||||
|
如果需要通过网络代理安装包,可以配置:
|
||||||
|
|
||||||
```toml
|
```toml
|
||||||
[dependency_management]
|
[dependency_management]
|
||||||
use_proxy = true
|
use_proxy = true
|
||||||
proxy_url = "http://proxy.example.com:8080"
|
proxy_url = "http://proxy.example.com:8080"
|
||||||
# 或者 SOCKS5 代理
|
|
||||||
# proxy_url = "socks5://proxy.example.com:1080"
|
|
||||||
```
|
```
|
||||||
|
|
||||||
|
**注意**:推荐优先使用PyPI镜像源而不是代理,镜像源通常更快更稳定。
|
||||||
|
|
||||||
## 编程方式配置
|
## 编程方式配置
|
||||||
|
|
||||||
也可以通过代码动态配置依赖管理:
|
也可以通过代码动态配置依赖管理:
|
||||||
@@ -114,7 +144,13 @@ from src.plugin_system.utils.dependency_config import configure_dependency_setti
|
|||||||
# 禁用自动安装
|
# 禁用自动安装
|
||||||
configure_dependency_settings(auto_install=False)
|
configure_dependency_settings(auto_install=False)
|
||||||
|
|
||||||
# 设置代理
|
# 设置PyPI镜像源(推荐)
|
||||||
|
configure_dependency_settings(
|
||||||
|
use_mirror=True,
|
||||||
|
mirror_url="https://pypi.tuna.tsinghua.edu.cn/simple"
|
||||||
|
)
|
||||||
|
|
||||||
|
# 设置网络代理
|
||||||
configure_dependency_settings(
|
configure_dependency_settings(
|
||||||
use_proxy=True,
|
use_proxy=True,
|
||||||
proxy_url="http://proxy.example.com:8080"
|
proxy_url="http://proxy.example.com:8080"
|
||||||
@@ -124,6 +160,8 @@ configure_dependency_settings(
|
|||||||
configure_dependency_settings(auto_install_timeout=600)
|
configure_dependency_settings(auto_install_timeout=600)
|
||||||
```
|
```
|
||||||
|
|
||||||
|
**注意**:编程方式的配置更改不会持久化,实际配置请修改 `bot_config.toml` 文件。
|
||||||
|
|
||||||
## 工作流程
|
## 工作流程
|
||||||
|
|
||||||
1. **插件初始化**: 当插件类被实例化时,系统自动检查依赖
|
1. **插件初始化**: 当插件类被实例化时,系统自动检查依赖
|
||||||
@@ -136,6 +174,7 @@ configure_dependency_settings(auto_install_timeout=600)
|
|||||||
|
|
||||||
```
|
```
|
||||||
[Plugin:web_search_tool] 开始自动安装Python依赖: ['asyncddgs', 'httpx[socks]']
|
[Plugin:web_search_tool] 开始自动安装Python依赖: ['asyncddgs', 'httpx[socks]']
|
||||||
|
[Plugin:web_search_tool] 使用PyPI镜像源: https://pypi.tuna.tsinghua.edu.cn/simple
|
||||||
[Plugin:web_search_tool] ✅ 成功安装: asyncddgs
|
[Plugin:web_search_tool] ✅ 成功安装: asyncddgs
|
||||||
[Plugin:web_search_tool] ✅ 成功安装: httpx[socks]
|
[Plugin:web_search_tool] ✅ 成功安装: httpx[socks]
|
||||||
[Plugin:web_search_tool] 🎉 所有依赖安装完成
|
[Plugin:web_search_tool] 🎉 所有依赖安装完成
|
||||||
@@ -154,10 +193,11 @@ configure_dependency_settings(auto_install_timeout=600)
|
|||||||
## 最佳实践
|
## 最佳实践
|
||||||
|
|
||||||
1. **使用详细的PythonDependency对象** 以获得更好的控制和文档
|
1. **使用详细的PythonDependency对象** 以获得更好的控制和文档
|
||||||
2. **合理设置可选依赖** 避免非核心功能阻止插件加载
|
2. **配置PyPI镜像源** 特别是在中国大陆地区,可显著提升下载速度
|
||||||
3. **指定版本要求** 确保兼容性
|
3. **合理设置可选依赖** 避免非核心功能阻止插件加载
|
||||||
4. **添加描述信息** 帮助用户理解依赖的用途
|
4. **指定版本要求** 确保兼容性
|
||||||
5. **测试依赖配置** 在不同环境中验证依赖是否正确
|
5. **添加描述信息** 帮助用户理解依赖的用途
|
||||||
|
6. **测试依赖配置** 在不同环境中验证依赖是否正确
|
||||||
|
|
||||||
## 安全考虑
|
## 安全考虑
|
||||||
|
|
||||||
@@ -170,10 +210,12 @@ configure_dependency_settings(auto_install_timeout=600)
|
|||||||
|
|
||||||
### 依赖安装失败
|
### 依赖安装失败
|
||||||
|
|
||||||
1. 检查网络连接
|
1. **优先尝试PyPI镜像源**:配置国内镜像源如清华、阿里云等
|
||||||
2. 验证代理设置
|
2. 检查网络连接
|
||||||
3. 检查pip配置
|
3. 验证镜像源URL是否正确
|
||||||
4. 查看详细的错误日志
|
4. 如果镜像源失败,可尝试禁用镜像源或更换其他镜像源
|
||||||
|
5. 检查代理设置(如果使用)
|
||||||
|
6. 查看详细的错误日志
|
||||||
|
|
||||||
### 版本冲突
|
### 版本冲突
|
||||||
|
|
||||||
|
|||||||
@@ -876,11 +876,17 @@ class DependencyManagementConfig(ConfigBase):
|
|||||||
auto_install_timeout: int = 300
|
auto_install_timeout: int = 300
|
||||||
"""安装超时时间(秒)"""
|
"""安装超时时间(秒)"""
|
||||||
|
|
||||||
|
use_mirror: bool = False
|
||||||
|
"""是否使用PyPI镜像源"""
|
||||||
|
|
||||||
|
mirror_url: str = ""
|
||||||
|
"""PyPI镜像源URL,如: "https://pypi.tuna.tsinghua.edu.cn/simple" """
|
||||||
|
|
||||||
use_proxy: bool = False
|
use_proxy: bool = False
|
||||||
"""是否使用代理进行包安装"""
|
"""是否使用网络代理(高级选项)"""
|
||||||
|
|
||||||
proxy_url: str = ""
|
proxy_url: str = ""
|
||||||
"""代理URL,如: "http://proxy.example.com:8080" 或 "socks5://proxy.example.com:1080" """
|
"""网络代理URL,如: "http://proxy.example.com:8080" """
|
||||||
|
|
||||||
pip_options: list[str] = field(default_factory=lambda: [
|
pip_options: list[str] = field(default_factory=lambda: [
|
||||||
"--no-warn-script-location",
|
"--no-warn-script-location",
|
||||||
|
|||||||
@@ -31,9 +31,25 @@ class DependencyConfig:
|
|||||||
return config.dependency_management.auto_install
|
return config.dependency_management.auto_install
|
||||||
return True
|
return True
|
||||||
|
|
||||||
|
@property
|
||||||
|
def use_mirror(self) -> bool:
|
||||||
|
"""是否使用PyPI镜像源"""
|
||||||
|
config = self._get_config()
|
||||||
|
if config and hasattr(config, 'dependency_management'):
|
||||||
|
return config.dependency_management.use_mirror
|
||||||
|
return False
|
||||||
|
|
||||||
|
@property
|
||||||
|
def mirror_url(self) -> str:
|
||||||
|
"""PyPI镜像源URL"""
|
||||||
|
config = self._get_config()
|
||||||
|
if config and hasattr(config, 'dependency_management'):
|
||||||
|
return config.dependency_management.mirror_url
|
||||||
|
return ""
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def use_proxy(self) -> bool:
|
def use_proxy(self) -> bool:
|
||||||
"""是否使用代理"""
|
"""是否使用网络代理"""
|
||||||
config = self._get_config()
|
config = self._get_config()
|
||||||
if config and hasattr(config, 'dependency_management'):
|
if config and hasattr(config, 'dependency_management'):
|
||||||
return config.dependency_management.use_proxy
|
return config.dependency_management.use_proxy
|
||||||
@@ -41,7 +57,7 @@ class DependencyConfig:
|
|||||||
|
|
||||||
@property
|
@property
|
||||||
def proxy_url(self) -> str:
|
def proxy_url(self) -> str:
|
||||||
"""代理URL"""
|
"""网络代理URL"""
|
||||||
config = self._get_config()
|
config = self._get_config()
|
||||||
if config and hasattr(config, 'dependency_management'):
|
if config and hasattr(config, 'dependency_management'):
|
||||||
return config.dependency_management.proxy_url
|
return config.dependency_management.proxy_url
|
||||||
|
|||||||
@@ -19,13 +19,15 @@ class DependencyManager:
|
|||||||
负责检查和自动安装插件的Python包依赖
|
负责检查和自动安装插件的Python包依赖
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def __init__(self, auto_install: bool = True, use_proxy: bool = False, proxy_url: Optional[str] = None):
|
def __init__(self, auto_install: bool = True, use_mirror: bool = False, mirror_url: Optional[str] = None, use_proxy: bool = False, proxy_url: Optional[str] = None):
|
||||||
"""初始化依赖管理器
|
"""初始化依赖管理器
|
||||||
|
|
||||||
Args:
|
Args:
|
||||||
auto_install: 是否自动安装缺失的依赖
|
auto_install: 是否自动安装缺失的依赖
|
||||||
use_proxy: 是否使用代理
|
use_mirror: 是否使用PyPI镜像源
|
||||||
proxy_url: 代理URL
|
mirror_url: PyPI镜像源URL
|
||||||
|
use_proxy: 是否使用网络代理
|
||||||
|
proxy_url: 网络代理URL
|
||||||
"""
|
"""
|
||||||
# 延迟导入配置以避免循环依赖
|
# 延迟导入配置以避免循环依赖
|
||||||
try:
|
try:
|
||||||
@@ -34,6 +36,8 @@ class DependencyManager:
|
|||||||
|
|
||||||
# 优先使用配置文件中的设置,参数作为覆盖
|
# 优先使用配置文件中的设置,参数作为覆盖
|
||||||
self.auto_install = config.auto_install if auto_install is True else auto_install
|
self.auto_install = config.auto_install if auto_install is True else auto_install
|
||||||
|
self.use_mirror = config.use_mirror if use_mirror is False else use_mirror
|
||||||
|
self.mirror_url = config.mirror_url if mirror_url is None else mirror_url
|
||||||
self.use_proxy = config.use_proxy if use_proxy is False else use_proxy
|
self.use_proxy = config.use_proxy if use_proxy is False else use_proxy
|
||||||
self.proxy_url = config.proxy_url if proxy_url is None else proxy_url
|
self.proxy_url = config.proxy_url if proxy_url is None else proxy_url
|
||||||
self.install_timeout = config.install_timeout
|
self.install_timeout = config.install_timeout
|
||||||
@@ -42,8 +46,10 @@ class DependencyManager:
|
|||||||
except Exception as e:
|
except Exception as e:
|
||||||
logger.warning(f"无法加载依赖配置,使用默认设置: {e}")
|
logger.warning(f"无法加载依赖配置,使用默认设置: {e}")
|
||||||
self.auto_install = auto_install
|
self.auto_install = auto_install
|
||||||
|
self.use_mirror = use_mirror or False
|
||||||
|
self.mirror_url = mirror_url or ""
|
||||||
self.use_proxy = use_proxy
|
self.use_proxy = use_proxy
|
||||||
self.proxy_url = proxy_url
|
self.proxy_url = proxy_url or ""
|
||||||
self.install_timeout = 300
|
self.install_timeout = 300
|
||||||
self.pip_options = ["--no-warn-script-location", "--disable-pip-version-check"]
|
self.pip_options = ["--no-warn-script-location", "--disable-pip-version-check"]
|
||||||
|
|
||||||
@@ -234,9 +240,15 @@ class DependencyManager:
|
|||||||
try:
|
try:
|
||||||
cmd = [sys.executable, "-m", "pip", "install", package]
|
cmd = [sys.executable, "-m", "pip", "install", package]
|
||||||
|
|
||||||
|
# 添加镜像源设置(优先)
|
||||||
|
if self.use_mirror and self.mirror_url:
|
||||||
|
cmd.extend(["-i", self.mirror_url])
|
||||||
|
logger.debug(f"[Plugin:{plugin_name}] 使用PyPI镜像源: {self.mirror_url}")
|
||||||
|
|
||||||
# 添加代理设置
|
# 添加代理设置
|
||||||
if self.use_proxy and self.proxy_url:
|
if self.use_proxy and self.proxy_url:
|
||||||
cmd.extend(["--proxy", self.proxy_url])
|
cmd.extend(["--proxy", self.proxy_url])
|
||||||
|
logger.debug(f"[Plugin:{plugin_name}] 使用网络代理: {self.proxy_url}")
|
||||||
|
|
||||||
# 添加配置的pip选项
|
# 添加配置的pip选项
|
||||||
cmd.extend(self.pip_options)
|
cmd.extend(self.pip_options)
|
||||||
@@ -277,11 +289,13 @@ def get_dependency_manager() -> DependencyManager:
|
|||||||
return _global_dependency_manager
|
return _global_dependency_manager
|
||||||
|
|
||||||
|
|
||||||
def configure_dependency_manager(auto_install: bool = True, use_proxy: bool = False, proxy_url: Optional[str] = None):
|
def configure_dependency_manager(auto_install: bool = True, use_mirror: bool = False, mirror_url: Optional[str] = None, use_proxy: bool = False, proxy_url: Optional[str] = None):
|
||||||
"""配置全局依赖管理器"""
|
"""配置全局依赖管理器"""
|
||||||
global _global_dependency_manager
|
global _global_dependency_manager
|
||||||
_global_dependency_manager = DependencyManager(
|
_global_dependency_manager = DependencyManager(
|
||||||
auto_install=auto_install,
|
auto_install=auto_install,
|
||||||
|
use_mirror=use_mirror,
|
||||||
|
mirror_url=mirror_url,
|
||||||
use_proxy=use_proxy,
|
use_proxy=use_proxy,
|
||||||
proxy_url=proxy_url
|
proxy_url=proxy_url
|
||||||
)
|
)
|
||||||
@@ -261,9 +261,13 @@ auto_install = true
|
|||||||
# 安装超时时间(秒)
|
# 安装超时时间(秒)
|
||||||
auto_install_timeout = 300
|
auto_install_timeout = 300
|
||||||
|
|
||||||
# 是否使用代理进行包安装
|
# 是否使用PyPI镜像源(推荐,可加速下载)
|
||||||
|
use_mirror = true
|
||||||
|
mirror_url = "https://pypi.tuna.tsinghua.edu.cn/simple" # PyPI镜像源URL,如: "https://pypi.tuna.tsinghua.edu.cn/simple"
|
||||||
|
|
||||||
|
# 是否使用网络代理(高级选项)
|
||||||
use_proxy = false
|
use_proxy = false
|
||||||
proxy_url = "" # 代理URL,如: "http://proxy.example.com:8080" 或 "socks5://proxy.example.com:1080"
|
proxy_url = "" # 网络代理URL,如: "http://proxy.example.com:8080"
|
||||||
|
|
||||||
# pip安装选项
|
# pip安装选项
|
||||||
pip_options = [
|
pip_options = [
|
||||||
|
|||||||
Reference in New Issue
Block a user