前情提要:
TransPaste :一款基于本地大语言模型的轻量级剪贴板翻译工具
TransPaste:本地 AI 翻译工具新版本升级后支持更多细粒度的翻译控制
事情是这样的。
有个同学安装后报了个错: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] 下面的 description、readme、classifiers 这些字段全塞进了 [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%