Skip to content

Awespykit 2.2.0

Choose a tag to compare

@laincat laincat released this 26 Sep 10:13
· 10 commits to main since this release

本次为重构版本:界面布局与操作方式保持不变,已有的配置文件可以继续使用。主要内容是让代码结构恢复可维护性,并修掉一批会在使用中真实碰到的问题。

重构:包内导入规范化

原先包内把 com / logic / settings / ui / utils 当作顶层模块导入(例如 from utils.thmt import ...),共 44 处。这种写法有三个实际后果:

  1. 用户环境里只要装了同名的第三方包,程序会直接启动失败。PyPI 上确实存在一个叫 utils 的包,报错为 ModuleNotFoundError: No module named 'utils.thmt';
  2. 必须先手工把包目录塞进 sys.path 才能工作,换个启动方式就可能失败;
  3. 子包之间无法表达依赖关系,改动时容易踩坑。

现已全部改为规范的包内导入。

修复

含相对导入的文件,「检查导入」功能完全失效

from . import x 这类相对导入会让导入扫描器抛异常,而调用方把整个文件的解析包在 try 里 —— 结果是含相对导入的文件,其全部依赖被静默丢弃,用户看不到任何缺失模块的提示。相对导入在真实项目里非常常见,这个功能等于对它们不工作。

停止任务实际停不下来,可能损坏 Python 环境

工作线程直接执行普通函数、从不调用 exec(),因此 quit() 对它们完全无效(实测确认)。但界面提示写着「尝试停止所有正在运行的任务」,用户看到后就会强退程序,而此时 pip 可能正处在安装、卸载的中间步骤,中断会留下装了一半的包、损坏该环境。

现在会先给线程自行退出的机会,再强制终止并等待其真正结束;提示文案也如实说明风险。

依赖版本不符时「双击没反应」

打包成 exe 后没有控制台窗口,而 fastpip 版本不符时原实现直接抛异常 —— 异常信息写进 stderr 却没人看得到,用户双击图标只见进程一闪而过。现在改为弹窗说明当前版本、要求版本和解决办法。

配置损坏会让程序行为异常

配置文件是 JSON,可能被手工改坏或被覆盖。原先这些异常值会被直接交给界面:字符串型的列表字段会被按字符遍历(abc 变成 a、b、c)、负数的窗口尺寸被传给 resize()、枚举字段退化成裸数字导致访问 .name 时出错。现在统一还原为合法值,坏值一律回退默认值 —— 实测八种损坏形态都能正常启动。

路径处理

  • 排除目录用前缀比较,把 C:/project 误判成 C:/proj 的子目录,导致该检查的源码被跳过;现按路径分量判断。
  • 镜像源校验只接受 https 且必须以 /simple 结尾,误拒 http 内网源和 PyTorch 官方轮子站这类合法地址。

子进程启动失败未捕获

两处 Popen 没有异常保护:Python 环境被删除或路径失效时,FileNotFoundError 会直接打断版本探测和打包流程,界面毫无反应。现在会捕获并给出可操作的提示。

配置保存失败被静默吞掉

写配置失败(磁盘满、目录只读、被杀毒软件拦截)时原先 except: pass,用户只会觉得「设置怎么又没记住」。现在会明确告知。

其他

  • com 与 utils.thmt 之间存在循环导入,原先靠导入顺序侥幸成立,换个导入顺序就会崩;已解除。
  • 裸 except 收窄为具体异常,避免连 KeyboardInterrupt 一起吞掉。
  • 拖放文件后滚动条不会滚到底部(用了控件高度而非滚动范围)。
  • 窗口最大化时仍会记录尺寸,导致下次还原大小不对。

工程化

测试从 5 个增加到 15 个,覆盖:三种启动方式(含直接运行脚本)、Qt 资源加载、同名第三方包遮蔽、fastpip 版本守卫。已验证这些测试能捕获回归。

产物

文件 说明
Awespykit.exe Windows 单文件可执行程序,双击即可运行,无需安装 Python
Awespykit.exe.sha256 exe 的 SHA256 校验和
awespykit-2.2.0-py3-none-any.whl Python 分发包(pip install 用)
awespykit-2.2.0.tar.gz 源码分发包
python-dist.sha256 两个 Python 分发包的 SHA256 校验和

也可以直接用 pip install Awespykit -U。