modify 修复build命令打包问题

This commit is contained in:
2026-03-06 14:56:44 +08:00
parent 538cdb69cd
commit b1968f5ddc
3 changed files with 34 additions and 50 deletions
@@ -1,10 +1,17 @@
# config_loader.py - 读取config.toml的示例代码 # config_loader.py - 读取config.toml的示例代码
import toml
import os import os
import sys
from pathlib import Path from pathlib import Path
from typing import Any, Dict, Optional from typing import Any, Dict, Optional
if sys.version_info >= (3, 11):
import tomllib
else:
import tomli as tomllib
class ConfigLoader: class ConfigLoader:
"""TOML配置文件加载器""" """TOML配置文件加载器"""
@@ -29,7 +36,7 @@ class ConfigLoader:
"config.toml", "config.toml",
"config/config.toml", "config/config.toml",
"~/.config/myapp/config.toml", "~/.config/myapp/config.toml",
"/etc/myapp/config.toml" "/etc/myapp/config.toml",
] ]
for path in possible_paths: for path in possible_paths:
@@ -44,12 +51,12 @@ class ConfigLoader:
if not self.config_path.exists(): if not self.config_path.exists():
raise FileNotFoundError(f"配置文件不存在: {self.config_path}") raise FileNotFoundError(f"配置文件不存在: {self.config_path}")
with open(self.config_path, 'r', encoding='utf-8') as f: with open(self.config_path, "r", encoding="utf-8") as f:
self._config = toml.load(f) self._config = tomllib.loads(f.read())
def get(self, key: str, default: Any = None) -> Any: def get(self, key: str, default: Any = None) -> Any:
"""获取配置值,支持点号分隔的路径""" """获取配置值,支持点号分隔的路径"""
keys = key.split('.') keys = key.split(".")
value = self._config value = self._config
try: try:
@@ -79,4 +86,3 @@ class ConfigLoader:
def all(self) -> Dict[str, Any]: def all(self) -> Dict[str, Any]:
"""获取所有配置""" """获取所有配置"""
return self._config return self._config
@@ -1,30 +1,9 @@
import sys
from .config import ConfigLoader from .config import ConfigLoader
import argparse
import os import os
from module_bank import PythonToSQLite from module_bank import PythonToSQLite
from typing import Callable from typing import Callable
key = None
# 检查是否在 PyInstaller 子进程中
def is_pyinstaller_child():
return len(sys.argv) > 1 and ("_child.py" in sys.argv[0] or sys.argv[1].isdigit())
def parse_args():
"""安全的参数解析函数"""
if is_pyinstaller_child():
# PyInstaller 子进程,使用默认参数
return argparse.Namespace(config="config.toml")
parser = argparse.ArgumentParser(
description="{{ cookiecutter.project_name }} 应用启动脚本"
)
parser.add_argument("--config", default="config.toml", help="配置文件路径")
return parser.parse_args()
args = parse_args()
def init_module_bank(config): def init_module_bank(config):
@@ -33,23 +12,21 @@ def init_module_bank(config):
if os.path.exists(module_path) == False: if os.path.exists(module_path) == False:
raise ValueError(f"模块路径不存在: {module_path}") raise ValueError(f"模块路径不存在: {module_path}")
packer_list = [PythonToSQLite(module_path) for module_path in MODULE_BANK_PATH_LIST] packer_list = [
PythonToSQLite(module_path, key=key) for module_path in MODULE_BANK_PATH_LIST
]
for packer in packer_list: for packer in packer_list:
modules = packer.list_modules() modules = packer.list_modules()
for module in modules: for module in modules:
print(f"{module['module_name']} {'[包]' if module['is_package'] else ''}") print(f"{module['module_name']} {'[包]' if module['is_package'] else ''}")
packer.install_importer() packer.install_importer(key=key)
def launch(run_fun: Callable[[dict, dict], None], run_mode: str): def launch(run_fun: Callable[[dict, dict], None], run_mode: str):
config = ConfigLoader("config.toml")
config = ConfigLoader(args.config)
# 获取对应运行模式的配置 # 获取对应运行模式的配置
default_config = config.get("default", {}) default_config = config.get("default", {})
run_mode = default_config.get("env", "development")
app_config = config.get(run_mode, {}) app_config = config.get(run_mode, {})
if run_mode == "production":
init_module_bank(config)
run_fun(app_config, default_config) run_fun(app_config, default_config)
@@ -2,6 +2,7 @@ import sys
from pathlib import Path from pathlib import Path
from typing import TypedDict, Literal, Optional, cast from typing import TypedDict, Literal, Optional, cast
if sys.version_info >= (3, 11): if sys.version_info >= (3, 11):
import tomllib import tomllib
from typing import Required, NotRequired from typing import Required, NotRequired