From b537ec15b73958bd11a2be4839ff23a19cabe202 Mon Sep 17 00:00:00 2001 From: HibiKier <45528451+HibiKier@users.noreply.github.com> Date: Mon, 23 Jun 2025 19:29:03 +0800 Subject: [PATCH] =?UTF-8?q?=E2=9C=A8=20=E4=BC=98=E5=8C=96=E8=99=9A?= =?UTF-8?q?=E6=8B=9F=E7=8E=AF=E5=A2=83=E7=AE=A1=E7=90=86=EF=BC=8C=E6=8F=92?= =?UTF-8?q?=E4=BB=B6=E7=AE=A1=E7=90=86=E6=94=AF=E6=8C=81=E5=90=8D=E7=A7=B0?= =?UTF-8?q?=E6=B7=BB=E5=8A=A0=20(#1932)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../plugin_store/data_source.py | 31 ++++++++++++------- .../manager/virtual_env_package_manager.py | 10 ++++++ 2 files changed, 30 insertions(+), 11 deletions(-) diff --git a/zhenxun/builtin_plugins/plugin_store/data_source.py b/zhenxun/builtin_plugins/plugin_store/data_source.py index 6633d404..b2dc96dc 100644 --- a/zhenxun/builtin_plugins/plugin_store/data_source.py +++ b/zhenxun/builtin_plugins/plugin_store/data_source.py @@ -23,12 +23,6 @@ from .config import ( LOG_COMMAND, ) -BAT_FILE = Path() / "win启动.bat" - -WIN_COMMAND = ["./Python310/python.exe", "-m", "pip", "install", "-r"] - -DEFAULT_COMMAND = ["poetry", "run", "pip", "install", "-r"] - def row_style(column: str, text: str) -> RowStyle: """被动技能文本风格 @@ -438,8 +432,8 @@ class StoreManager: continue if cls.check_version_is_new(plugin_info, suc_plugin): logger.debug( - f"插件 {plugin_info.name}({plugin_info.module}) 已是最新版本" - ",跳过", + f"插件 {plugin_info.name}({plugin_info.module}) " + "已是最新版本,跳过", LOG_COMMAND, ) continue @@ -486,6 +480,18 @@ class StoreManager: @classmethod async def _resolve_plugin_key(cls, plugin_id: str) -> str: + """获取插件module + + 参数: + plugin_id: module,id或插件名称 + + 异常: + ValueError: 插件不存在 + ValueError: 插件不存在 + + 返回: + str: 插件模块名 + """ plugin_list: list[StorePluginInfo] = await cls.get_data() if is_number(plugin_id): idx = int(plugin_id) @@ -493,6 +499,9 @@ class StoreManager: raise ValueError("插件ID不存在...") return plugin_list[idx].module elif isinstance(plugin_id, str): - if plugin_id not in [v.module for v in plugin_list]: - raise ValueError("插件Module不存在...") - return plugin_id + result = ( + None if plugin_id not in [v.module for v in plugin_list] else plugin_id + ) or next(v for v in plugin_list if v.name == plugin_id).module + if not result: + raise ValueError("插件 Module / 名称 不存在...") + return result diff --git a/zhenxun/utils/manager/virtual_env_package_manager.py b/zhenxun/utils/manager/virtual_env_package_manager.py index 5c4b16e5..c4665bd5 100644 --- a/zhenxun/utils/manager/virtual_env_package_manager.py +++ b/zhenxun/utils/manager/virtual_env_package_manager.py @@ -3,12 +3,20 @@ import subprocess from subprocess import CalledProcessError from typing import ClassVar +from zhenxun.configs.config import Config from zhenxun.services.log import logger BAT_FILE = Path() / "win启动.bat" LOG_COMMAND = "VirtualEnvPackageManager" +Config.add_plugin_config( + "virtualenv", + "python_path", + None, + help="虚拟环境python路径,为空时使用系统环境的poetry", +) + class VirtualEnvPackageManager: WIN_COMMAND: ClassVar[list[str]] = [ @@ -21,6 +29,8 @@ class VirtualEnvPackageManager: @classmethod def __get_command(cls) -> list[str]: + if path := Config.get_config("virtualenv", "python_path"): + return [path, "-m", "pip"] return cls.WIN_COMMAND if BAT_FILE.exists() else cls.DEFAULT_COMMAND @classmethod