修了TransPaste的4个bug

前情提要:

TransPaste :一款基于本地大语言模型的轻量级剪贴板翻译工具

TransPaste:本地 AI 翻译工具新版本升级后支持更多细粒度的翻译控制

TransPaste 升级:一个剪贴板翻译工具的自我修养

事情是这样的。

有个同学安装后报了个错:404 Client Error: Not Found for url: http://localhost:11434/api/generate/api/generate

一眼看过去就知道怎么回事了。路径拼了两遍。

代码里 OLLAMA_API_URL 写的是 http://localhost:11434/api/generate,然后第398行又做了个字符串拼接:

api_url = f"{base_url}/api/generate"

结果就是 /api/generate 重复了两次。这种错误说低级也低级,但确实会发生。变量叫 OLLAMA_API_URL,名字本身就暗示这是个完整URL,后面的人自然会以为直接用就行,谁知道还要再拼一段。

改法很简单,把常量改成 http://localhost:11434,拼接那里不动。


第二个问题是版本号冲突了。

原本是应该要求版本号只在 __init__.py 一个地方定义,其他地方都从那里导入。这本身没问题,代码里 main.py 已经是这么做的了:

from transpaste import __version__

但 pyproject.toml 里版本号有一次给改成了硬编码的,和 __init__.py 对不上。改成了动态读取:

[project]
dynamic = ["version"]

[tool.setuptools.dynamic]
version = {attr = "transpaste.__version__"}

结果打包就炸了。

报错信息说 tool.setuptools.dynamic.classifiers 必须是对象。我一看,原来编辑的时候把 [project] 下面的 descriptionreadmeclassifiers 这些字段全塞进了 [tool.setuptools.dynamic] 下面。

这些字段根本不是动态的,它们就该老老实实待在 [project] 下面。只有 version 需要动态读取。

重新写了一遍 pyproject.toml,结构对了,打包通过。

这个教训是:改配置文件的时候别手滑,看清楚每个字段属于哪个section。


第三个问题更隐蔽。

翻译能用了,但复制内容到剪贴板后不会自动触发翻译,每次都要重新运行程序才行。

看代码发现,macOS 有轮询回退机制,每500ms检查一次剪贴板变化。但 Windows 没有,只依赖 dataChanged 信号。

if sys.platform == "darwin":
    # 只有macOS才有轮询
    self.poll_timer = QTimer(self)
    self.poll_timer.timeout.connect(self._poll_clipboard)
    self.poll_timer.start(500)

问题就出在这。Qt 的 dataChanged 信号在 Windows 上并不总是可靠,尤其是程序自己往剪贴板写内容之后,信号可能就断了。

改法也简单,把轮询机制从 macOS 专属改成全平台启用:

self.poll_timer = QTimer(self)
self.poll_timer.timeout.connect(self._poll_clipboard)
self.poll_timer.start(500)

500ms 轮询一次,开销可以忽略不计,但可靠性提升很大。


总结一下今天犯的错:

URL 拼接重复,是因为变量命名和实际用法不一致。如果一开始就叫 OLLAMA_BASE_URL,后面的人就不会误会。

pyproject.toml 配置错误,是编辑时没看清结构。配置文件这种地方,错一个字符就能让整个构建挂掉。

Windows 剪贴板不触发,是平台差异没考虑到。开发时在 macOS 上测得好好的,到了 Windows 就出问题。

这些bug都不难修,但都不该犯。写代码的时候多想一步,能省后面很多麻烦。

预览时标签不可点

Close

更多

Name cleared

微信扫一扫赞赏作者

Like the AuthorOther Amount

赞赏后展示我的头像

作品

暂无作品

Like the Author

Other Amount

¥

最低赞赏 ¥0

OK

Back

Other Amount

更多

赞赏金额

¥

最低赞赏 ¥0

1

2

3

4

5

6

7

8

9

0

.

虚拟化,操作系统,以及一些小工具 · 目录

虚拟化,操作系统,以及一些小工具

上一篇ErTing(耳听):一个简单的音频降噪工具下一篇OpenLaoKe 更新:本地 GGUF 模型,零 API 费用跑起来

Close

更多

搜索「」网络结果

Close

调整当前正文文字大小

更多

100%