小白Python工具使用说明:三人聚智-Python程序管理工具
bili 视频 1:
版本下载:三人聚智-余汉波 - sanrenjz
程序小店:程序小店 - 虚拟商品销售平台
1. 下载与安装
在 sanrenjz - 三人聚智-余汉波的版本介绍中找到你需要版本,然后进行下载解压,解压之后双击“三人聚智-余汉波程序控制工具.exe”便可运行程序,绿色版本,不需安装。QMT 量化建议安装 yuhanbopy-lh 版本,也是 github 开源版本,嵌入 QMT 相关库。
若是 QMT 量化交易的小白建议 yuhanbopy-lh 版本,该版内嵌 python 和 mini QMT 的库 xquant,省略复杂的配置。
若能访问 github,也可以拉取整个库,或通过夸克网盘下载,这边就不用支付相应的资源流量费。若愿意在程序小店付费下载就更好了,0.99 元。
程序中显示的所有 python 程序代码是放在本地文件夹 resources\app\software 中,将需要运行的代码放到该文件夹中便可运行(最好一个 python 程序或代码创建一个文件夹,以免混杂,更好管理),而运行只需双击更可。
- 程序小店的代码程序:双击“腾讯云对象存储下载器”,会出现下面的界面,只需将在程序小店购买获得的链接粘贴到“下载地址”便可。程序就会进行下载并解压文件到 resources\app\software 中,在应用层主界面就能看到该程序。
- github 的代码程序:如果你的代码是在 github 上,那么只需双击"GiHub 仓库下载器",将仓库地址粘贴上来;选择保存位置,最好是应用的 resources\app\software 文件夹;点击“克隆仓库”便可拉取整个仓库,自动解压到 resources\app\software 中,在应用层主界面就能看到该程序。
- 手动加载:如果你的代码是自己写的,或来自于其他路径,那么可以点击菜单栏的“本地文件”,建议加载整个文件夹,会将整个文件复制到 resources\app\software 文件夹中,容易管理的同时,可以加载相应的说明等,而不是看不懂的文件。
3. 程序代码的使用
将程序代码加载进来后,双击便可运行。第一次运行可能会较慢,程序会检查程序代码文件夹的 requirements.txt 文件。若库 requirements.txt 载明的库已经安装会跳过,否则会从 pip ,阿里云镜像或清华镜像中拉取相应的库,进行安装。
若你的库是自己开发的,或者不是开源库,需要自己将文件放到 resources\python\python-3.12.8-embed-amd64\Lib\site-packages 文件夹内。
1. 基本功能
- 这是一个基于 Electron 的桌面应用程序,用于管理和运行 Python 脚本,用于提高开发和文件管理效率。
- 支持加密和非加密的 Python 程序
- 提供实时运行日志显示
- 自动管理 Python 依赖
2. 版本使用和下载
该程序共提供三个版本,分别命名为:yuhanbopy-xl、yuhanbopy-lh 和 yuhanbopy-mini。其中 yuhanbopy-lh 在 github 的进行开源,地址 yuhanbo758/yuhanbopy-app: 三人聚智-余汉波程序控制工具,基于 MIT 许可证发布。
- 付费下载:三人聚智-余汉波程序控制工具使用说明 | 三人聚智-余汉波程序小店
- yuhanbopy-xl:有嵌入版 python,无需另外安装 python,适用于电脑小白,下载解压直接使用,效率优先。
- yuhanbopy-lh:在 yuhanbopy-xl 基础上,植入了 mini QMT 的库 xquant,主要对象是需要小 QMT 量化交易的小白,可以直接加载运行个人提供“通达信与 QMT 结合下单”的 tdx3 程序。
- yuhanbopy-mini:yuhanbopy-xl 的 mini 版,没有嵌入版 python,安装后首次启动时,系统会要求选择 Python 解释器(.exe 文件)
3. 程序目录结构
主要程序存放在 app/software 目录下,主要包含三个格式文件,py 或 enc 文件、settings.json 文件和 requirements.txt 文件:
- 支持 .py 文件(普通 Python 文件)
- 支持 .enc 文件(加密的 Python 文件)
3.2 文件夹程序
每个程序文件夹可以包含 json 相关说明,示例:
3.3 依赖管理
- 在程序目录中可以放置 requirements.txt 文件
- 系统会自动检查并安装缺失的依赖
- 使用多个 pip 源以提高安装成功率:
- pypi.org
- 清华大学镜像
- 阿里云镜像
4. 程序运行
- Windows 64 位操作系统
- 程序列表会显示所有可用的 Python 程序——若文件夹中有 settings.json 文件,显示指定 py 文件,否则显示文件夹中所有 py 文件。
- 双击列表中的程序即可运行
- 运行时会自动打开日志窗口,显示程序输出
- 如果程序有依赖项(requirements.txt 文件),会自动安装所需依赖
- 需加载本地 python 代码,点击右上角“本地文件”,选择 py 文件或文件夹,会将文件或文件夹复制到 app/software 下,创建项目。
更新说明
本节归纳近期需要在项目中完成的功能改进、发布流程与文档整理要点(已去掉时间戳与细节日期)。主要改动与工作项:
建议的执行顺序(便于风险控制):
- 文档与说明整理:使用 readme-updater 同步或生成项目级 README;将插件的完整功能介绍与使用说明从 settings.json 中迁移到插件目录下的 README.md(settings.json 的 description 字段仅保留一行简要说明),并在应用界面“详情”中打开该 README。
- 自动更新与发布流程:为应用实现自动升级机制,优先通过站点对象存储拉取更新(示例地址:xz.sanrenjz.com),若对象存储没有对应平台或版本则回退至 GitHub Releases;后续自动上传封装好的安装包到 GitHub Releases;配置 GitHub Actions(可通过 github-auto-package skill)实现每次提交触发自动打包,并按约定的版本号规则递增、产出多平台构建(Windows/macOS/Linux)。
- 发布与资产管理:统一 Release 资产命名为 yuhanbopy-app+<版本号>,排查并移除非必须的发布资产(例如调试用的 builder-debug.yml 等),以免用户困惑。
- UI 与运行体验优化:移除界面中不应展示的提示性/标记性文字;登录头像使用应用 logo(登录用户在 logo 右下显示“会员”角标);在菜单中增加“设置”与“打开本地插件文件夹”入口,修正“运行 / 详情”按钮的布局,使其位于插件卡片内并对齐。
- 插件管理与运行:下载的插件自动解压到相对路径 app\software(应用自动读取该目录);在应用内增加“详情”功能以打开插件 README 便于快速上手;优化后台进程管理,确保用户关闭主程序后相关后台任务能够完整退出,修复与磁盘缓存创建相关的错误日志。
- 按需把插件说明迁移到 README 并用 readme-updater 同步;
- 配置并验证 GitHub Actions 的自动打包流程(多平台与命名规范);
- 修复后台进程与缓存相关 bug;
- 最后做前端 UI 调整与发布资产清理。
项目仓库 README 要点
以下内容为仓库 yuhanbopy-app README 的精要摘录,便于在本说明文档中快速参考:
- 技术栈:Electron、electron-builder、electron-updater、Node.js、内嵌 Python 3.12.8、adm-zip、@electron/remote、xtquant 等。
- 系统要求:Windows x64(64 位);运行时已内嵌 Python,无需额外安装 Python(针对 yuhanbopy-xl/lh 版本)。
- 快速上手:
- 从 Releases 页面下载已封装的安装包或便携版;
- 开发环境:git clone → npm install → npm start;
- 构建安装包:示例 npm run build-win,产物输出到 dist/。
- 目录结构要点:主程序文件(main.js、index.html、log.html),插件放到 app/software/,内嵌 Python 放在 python/python-3.12.8-embed-amd64/。
- 插件开发要点:每个插件放 app/software/
/,必须包含 settings.json(含 name、description、main_file、version、author、category),可放 requirements.txt;入口支持 .py(明文)、.enc(AES-256-CBC)或 .zip(按 main.py → name.py → 第一个 .py 顺序查找)。 - 配置与安全:支持通过环境变量 YUHANBOPY_ENC_KEY 覆盖 .enc 解密密钥;解密后临时文件放系统临时目录并在程序退出后清理;ZIP 解压含路径穿越防护(Zip Slip);UI 输出用 textContent 避免 XSS。
- 发布与贡献:项目采用 MIT 许可证;通过 GitHub Releases 发布安装包;欢迎 Fork / PR / Issue 提交改进建议。作者信息与联系方式也在仓库 README 中给出。
5. 安全特性
- 支持 AES-256-CBC 加密的 Python 程序(.enc 文件)
- 加密程序运行时会自动解密到临时目录
- 程序结束后自动清理临时文件
6. 注意事项
- 若是 yuhanbopy-mini 应用,确保 Python 解释器路径正确设置
- 建议在程序目录中提供 requirements.txt 声明依赖
- 加密程序需要使用特定的加密工具进行加密
- 程序运行时保持日志窗口打开可查看实时输出
7. 错误处理
这个工具设计得比较完善,特别适合管理和分发 Python 程序,同时通过加密机制保护源代码安全。
- 如果遇到 Python 环境问题,可以通过界面重新选择 Python 解释器,或卸载重装
- 依赖安装失败时,日志窗口会显示详细错误信息
- 程序运行错误会在日志窗口中显示具体原因
- 终端模拟器: 内置终端工具,支持命令行操作
- 文件下载器: 通用的文件下载工具,支持多种文件格式
- GitHub 仓库下载器: 便捷的 GitHub 仓库克隆和下载工具
- 腾讯云对象存储下载器: 专用的腾讯云 COS 文件下载工具
- 同花顺板块自动交易系统: 基于同花顺板块的自动交易系统
- 通达信板块自动交易系统 4.0: 基于通达信和国金 QMT 的自动化交易系统
- 问财单策略量化交易系统 2.0: 基于问财自然语言查询的量化交易系统
- 自定义工具集成: 可扩展的工具集成平台
8.1 系统工具
终端模拟器
- 功能: 简单的终端模拟器,可以执行系统命令
- 使用方法:
- 输入任何系统命令来执行
- 输入 'exit' 或 'quit' 退出程序
- 输入 'clear' 清除屏幕
- 输入 'cd 目录路径' 切换工作目录
8.2 下载工具
文件下载器
- 功能: 通用的文件下载工具
- 使用方法:
- 在输入框中粘贴文件下载地址
- 选择文件保存位置
- 选择是否自动解压 ZIP 文件
- 点击下载按钮开始下载
GitHub 仓库下载器
- 功能: GitHub 仓库克隆工具
- 使用方法:
- 在输入框中粘贴 GitHub 仓库地址
- 选择保存位置
- 选择是否自动解压
- 点击克隆仓库按钮开始下载
腾讯云对象存储下载器
- 功能: 腾讯云对象存储文件下载工具
- 使用方法:
- 在输入框中粘贴文件下载地址
- 点击下载按钮开始下载
- 文件将保存到 app/software/ 目录
- ZIP 文件会自动解压
8.3 量化交易系统
同花顺板块自动交易系统
程序小店 - 小QMT-(加密)QMT与同花顺结合:动态板块监控交易
- 主要特点:
- 自动监控同花顺自定义板块变化
- 根据板块内容自动买入或卖出股票
- 支持设置交易间隔、单笔金额和总金额
- 支持多种委托方式和价格调整
- 实时日志显示交易状态
通达信板块自动交易系统 4.0
程序小店 - 小QMT-(加密)QMT与通达信结合 4.0:监测交易系统,通达信公式自动交易系统
- 主要特点:
- 支持自定义买入卖出板块监控
- 灵活的交易参数设置
- 实时委托和成交反馈
- 智能资金管理和风控
- 完整的日志记录系统
问财单策略量化交易系统 2.0
程序小店 - 小QMT-(加密)QMT与问财结合-单策略2.0:自然语言自动化交易系统
- 主要特点:
- 支持通过自然语言查询选股
- 自动执行交易策略
- 实时查看持仓和资产信息
- 定时执行策略
- 支持股票、基金、可转债等多种证券类型
9. 插件开发指南
本章节将指导您如何为三人聚智-Python 程序管理工具开发自定义插件。
插件系统基于标准的目录结构和配置文件,支持以下特性:
- 标准化的配置管理
- 依赖包自动安装
- 统一的界面风格
- 日志和错误处理
9.2 插件目录结构
每个插件都应该放在 resources/app/software/ 目录下的独立文件夹中:
9.3 配置文件说明
settings.json(必需)
这是插件的元数据配置文件,系统通过此文件识别和加载插件:
字段说明:
- description: 插件的详细描述,支持换行符
- main_file: 主程序文件名(相对于插件目录)
- version: 插件版本号
- author: 开发者信息
- category: 插件分类(如:下载工具、量化交易、系统工具等)
requirements.txt(可选)
列出插件需要的 Python 包依赖:
系统会在运行插件前自动安装这些依赖包。
插件的自定义图标文件:
图标设计建议:
- 格式: ICO 格式图标文件
- 尺寸: 建议使用 32x32 或 48x48 像素
- 位置: 放在插件根目录下
- 作用: 在主界面程序列表中显示为插件图标
图标制作方法:
- 选择与插件功能相关的图形元素
- 确保在小尺寸下仍然清晰可见
- 使用适当的颜色对比度
示例转换命令(ImageMagick):
- 图像编辑软件: 使用 Photoshop、GIMP 等软件导出为 ICO 格式
- 命令行工具: 使用 ImageMagick 等工具进行格式转换
图标文件要求:
如果不提供 logo.ico 文件,系统将使用默认图标显示插件。插件模板目录中包含了一个示例图标文件供参考。
- 支持透明背景
- 建议包含多个尺寸(16x16, 32x32, 48x48)
9.4.1 基本结构
插件主程序应该遵循以下基本结构:
9.4.2 界面设计建议
- 使用 Tkinter: 推荐使用 Tkinter 作为 GUI 框架,确保兼容性
- 响应式布局: 使用 grid 或 pack 布局管理器创建响应式界面
- 统一风格: 使用 ttk 组件保持界面风格一致
- 错误处理: 添加适当的异常处理和用户提示
9.4.3 配置管理
插件应该支持配置文件管理:
9.5 插件开发模板
系统提供了一个完整的插件开发模板,位于: resources/app/software/plugin_template/
您可以复制此模板作为新插件的起点。
- 完整的插件结构示例
- 标准的配置文件管理
- 界面组件创建示例
- 错误处理机制
- 日志输出功能
9.6.1 本地测试
- 将插件文件夹放入 resources/app/software/ 目录
- 重启应用程序
- 在主界面中找到您的插件并运行
9.6.2 调试技巧
- 控制台输出: 使用 print() 输出调试信息
- 日志记录: 在界面中添加日志输出区域
- 异常处理: 使用 try-catch 捕获和显示错误
- 配置验证: 确保配置文件格式正确
9.7 插件发布和分享
9.7.1 打包插件
- 确保所有必要文件都在插件目录中
- 测试插件在不同环境下的运行情况
- 编写详细的使用说明
9.7.2 分享插件
- 可以将插件目录打包为 ZIP 文件分享
- 其他用户只需解压到 software/ 目录即可使用
- 建议在 GitHub 等平台分享插件代码
9.8 常见问题和解决方案
Q: 插件无法在主界面显示?
A: 检查 settings.json 文件格式是否正确,确保 main_file 字段指向正确的文件。
A: 检查 requirements.txt 文件格式,确保包名和版本号正确。
A: 确保所有 Python 文件都使用 UTF-8 编码,并在文件开头添加编码声明。
A: 插件运行时的工作目录就是插件所在的文件夹,可以直接使用相对路径访问资源文件。
A: 检查以下几点:
- 确保图标文件格式为标准的 ICO 格式
- 重启应用程序以刷新图标缓存
- 检查图标文件是否损坏,可以尝试重新制作
Q: 如何制作高质量的插件图标?
A: 建议步骤:
- 确保图标在小尺寸下仍然清晰
- 使用在线工具或专业软件转换为 ICO 格式
- 测试图标在不同背景下的显示效果
9.9 高级功能
9.9.1 加密插件
系统支持加密的 .enc 文件,可以保护插件源代码。
插件可以包含多个 Python 文件,通过 import 语句相互调用。
插件可以包含图片、数据文件等资源,放在插件目录中即可访问。
资源文件访问示例:
- logo.ico: 插件图标文件,用于在主界面显示
- 数据文件: CSV、JSON、XML 等数据文件
- 配置模板: 默认配置文件模板
- 帮助文档: README、使用说明等文档
- 其他图片: PNG、JPG 等图片资源
10. 插件集成和配置详解
10.1 插件自动发现机制
系统启动时会自动扫描 resources/app/software/ 目录下的所有子目录和文件:
- 配置检测: 检查每个文件夹中是否存在 settings.json 文件
- 插件注册: 根据配置文件信息将插件注册到系统中
- 界面显示: 在主界面的程序列表中显示可用插件
10.2 插件加载流程
当用户点击运行插件时,系统执行以下步骤:
10.3 依赖包管理
10.3.1 自动安装机制
系统会在运行插件前自动检查和安装依赖包:
10.3.2 依赖包安装位置
- 依赖包安装在系统的 Python 环境中
- 所有插件共享相同的依赖包环境
- 建议使用兼容的包版本避免冲突
10.3.3 常用依赖包推荐
# 界面开发
tkinter # 内置GUI库(推荐)
pillow>=8.0.0 # 图像处理
# 数据处理
pandas>=1.3.0 # 数据分析
numpy>=1.21.0 # 数值计算
openpyxl>=3.0.0 # Excel文件处理
# 网络请求
requests>=2.25.0 # HTTP请求
urllib3>=1.26.0 # URL处理
# 文件处理
pathlib # 路径处理(内置)
json # JSON处理(内置)
configparser # 配置文件处理(内置)
10.4 插件配置管理最佳实践
10.4.1 配置文件结构
建议使用分层的配置文件结构:
10.4.2 配置文件示例
settings.json(系统配置):
config.json(用户配置):
10.4.3 配置管理代码示例
import json
import os
from pathlib import Path
class ConfigManager:
"""配置管理器"""
def __init__(self, plugin_dir=None):
"""初始化配置管理器"""
self.plugin_dir = Path(plugin_dir) if plugin_dir else Path.cwd()
self.config_file = self.plugin_dir / "config.json"
self.default_config_file = self.plugin_dir / "default_config.json"
def load_config(self):
"""加载配置文件"""
# 加载默认配置
default_config = self.load_default_config()
# 加载用户配置
if self.config_file.exists():
try:
with open(self.config_file, 'r', encoding='utf-8') as f:
user_config = json.load(f)
# 合并配置
config = self.merge_config(default_config, user_config)
except Exception as e:
print(f"加载用户配置失败: {e}")
config = default_config
else:
config = default_config
self.save_config(config)
return config
def load_default_config(self):
"""加载默认配置"""
if self.default_config_file.exists():
try:
with open(self.default_config_file, 'r', encoding='utf-8') as f:
return json.load(f)
except Exception as e:
print(f"加载默认配置失败: {e}")
# 返回硬编码的默认配置
return {
"ui_settings": {
"theme": "light",
"window_size": "800x600"
},
"data_settings": {
"default_format": "xlsx",
"max_rows": 10000
}
}
def save_config(self, config):
"""保存配置文件"""
try:
with open(self.config_file, 'w', encoding='utf-8') as f:
json.dump(config, f, ensure_ascii=False, indent=4)
except Exception as e:
print(f"保存配置失败: {e}")
def merge_config(self, default, user):
"""合并配置"""
result = default.copy()
for key, value in user.items():
if key in result and isinstance(result[key], dict) and isinstance(value, dict):
result[key] = self.merge_config(result[key], value)
else:
result[key] = value
return result
10.5 插件生命周期管理
10.5.1 插件状态
系统跟踪每个插件的运行状态:
- 运行中: 插件正在执行
- 已停止: 插件执行完成或被用户停止
- 错误: 插件运行时发生错误
10.5.2 进程管理
// 软件管理器中的进程管理(参考)
class SoftwareManager {
constructor() {
this.runningProcesses = new Map(); // 存储运行中的进程
}
// 启动插件
async runSoftware(softwarePath, softwareName) {
// 创建Python进程
// 设置工作目录
// 监控输出和错误
// 注册进程到管理器
}
// 停止插件
stopSoftware(softwareName) {
// 查找进程
// 发送终止信号
// 清理资源
}
}
10.6 插件调试和日志
10.6.1 日志记录最佳实践
import logging
import os
from datetime import datetime
class PluginLogger:
"""插件日志管理器"""
def __init__(self, plugin_name, log_dir="logs"):
"""初始化日志器"""
self.plugin_name = plugin_name
self.log_dir = log_dir
# 创建日志目录
os.makedirs(log_dir, exist_ok=True)
# 配置日志器
self.logger = logging.getLogger(plugin_name)
self.logger.setLevel(logging.DEBUG)
# 创建文件处理器
log_file = os.path.join(log_dir, f"{plugin_name}_{datetime.now().strftime('%Y%m%d')}.log")
file_handler = logging.FileHandler(log_file, encoding='utf-8')
file_handler.setLevel(logging.DEBUG)
# 创建控制台处理器
console_handler = logging.StreamHandler()
console_handler.setLevel(logging.INFO)
# 设置格式
formatter = logging.Formatter(
'%(asctime)s - %(name)s - %(levelname)s - %(message)s'
)
file_handler.setFormatter(formatter)
console_handler.setFormatter(formatter)
# 添加处理器
self.logger.addHandler(file_handler)
self.logger.addHandler(console_handler)
def info(self, message):
"""记录信息日志"""
self.logger.info(message)
def error(self, message):
"""记录错误日志"""
self.logger.error(message)
def debug(self, message):
"""记录调试日志"""
self.logger.debug(message)
10.6.2 错误处理和用户反馈
def safe_execute(func, error_message="操作失败"):
"""安全执行函数,捕获异常并显示用户友好的错误信息"""
try:
return func()
except FileNotFoundError as e:
messagebox.showerror("文件错误", f"找不到文件: {e}")
logger.error(f"文件未找到: {e}")
except PermissionError as e:
messagebox.showerror("权限错误", f"没有访问权限: {e}")
logger.error(f"权限错误: {e}")
except json.JSONDecodeError as e:
messagebox.showerror("配置错误", f"配置文件格式错误: {e}")
logger.error(f"JSON解析错误: {e}")
except Exception as e:
messagebox.showerror("错误", f"{error_message}: {e}")
logger.error(f"未知错误: {e}")
return None
10.7 插件性能优化
10.7.1 启动优化
- 延迟加载非必需模块
- 使用配置缓存
- 优化界面初始化
10.7.2 内存管理
- 及时释放大对象
- 使用生成器处理大数据
- 避免内存泄漏
10.7.3 响应性优化
import threading
from tkinter import ttk
class ResponsivePlugin:
"""响应式插件示例"""
def __init__(self, root):
self.root = root
self.progress_var = tk.StringVar()
self.create_widgets()
def create_widgets(self):
"""创建界面"""
# 进度条
self.progress = ttk.Progressbar(
self.root,
mode='indeterminate'
)
self.progress.pack(pady=10)
# 状态标签
self.status_label = ttk.Label(
self.root,
textvariable=self.progress_var
)
self.status_label.pack()
def long_running_task(self):
"""长时间运行的任务"""
def task():
self.progress.start()
self.progress_var.set("正在处理...")
try:
# 执行耗时操作
self.do_heavy_work()
self.progress_var.set("完成")
except Exception as e:
self.progress_var.set(f"错误: {e}")
finally:
self.progress.stop()
# 在后台线程中执行
threading.Thread(target=task, daemon=True).start()
10.8 插件安全考虑
10.8.1 文件访问安全
- 限制文件访问范围
- 验证文件路径
- 避免执行外部命令
10.8.2 网络安全
- 验证 URL 和证书
- 处理网络超时
- 保护敏感信息
10.8.3 用户输入验证
def validate_input(value, input_type="string", max_length=None, allowed_chars=None):
"""输入验证函数"""
if input_type == "string":
if max_length and len(value) > max_length:
raise ValueError(f"输入长度不能超过{max_length}字符")
if allowed_chars and not all(c in allowed_chars for c in value):
raise ValueError("包含非法字符")
elif input_type == "number":
try:
float(value)
except ValueError:
raise ValueError("必须输入数字")
return True
其他应用程序正创建中,可关注右上方"程序小店",获取更多可视化 python 应用程序。
11.版权信息
版权所有 © 2025 余汉波 基于 MIT 许可证发布