升级只需5分钟,修环境要5小时
Termux自动升级了,Python从3.11跳到3.13。心想”好事啊,新版本”,结果venv全废、cryptography编译崩溃、浏览器自动化被系统block。升级只需5分钟,修环境要5小时。
TL;DR
Termux升级导致Python 3.11→3.13,venv路径变了,旧依赖全废。cryptography 50.0.0在Android上编译直接崩溃,锁死48.0.1才跑通。浏览器自动化被系统日志原话block——“Termux不支持浏览器自动化”,后来用Selenium+Chromium绕过去,关键参数--no-zygote。验证通过:chromium 149 + selenium 4.47 OK。规律:Termux升级=推倒重来。
一、起因:自动升级,心想”好事啊”
有一天,我打开Termux,发现它自动升级了。
Python版本从3.11跳到了3.13。我心想:好事啊,新版本,性能更好,兼容性更强。
然后我试着跑了一下Hermes。
报错了。
不是小报错,是那种”整个环境都不认识了”的报错。venv路径变了,旧依赖全废,pip list里一堆红字。
我这才意识到:在Termux里,”升级”这两个字,从来不是好事。
二、推倒重来:Python 3.13的阵痛
Termux的包管理器很激进。它升级Python,不是打补丁,是直接替换。
Python 3.11没了,换成3.13。venv的路径变了,之前装在3.11环境里的所有库——cryptography、aiosqlite、selenium、flask——全都不见了。
这就像你搬了家,发现钥匙打不开门,因为锁芯换了。
我不得不重新建venv,重新pip install。但问题不在于重装,而在于有些库在Android上根本装不上。
三、编译崩溃:cryptography的执念
第一个撞墙的是cryptography。
Hermes的微信插件依赖这个库。日志里写得清清楚楚:Failed to load plugin 'wecom-platform': No module named 'cryptography.hazmat.backends'。
我心想,pip install cryptography呗。
结果编译直接崩溃。
cryptography 50.0.0版本在Android aarch64架构上编译失败。报错信息很长,核心意思就一个:Rust原生依赖编译不过去。
我试了42.0.8,编译失败。试了50.0.0,编译失败。最后锁死48.0.1,设了ANDROID_API_LEVEL=33,才勉强编译通过。
那一刻我懂了:开源库的版本号不是越新越好,能跑通才是硬道理。
四、系统block:浏览器自动化的死局与活路
第二个坑更隐蔽。
我想在Termux里跑浏览器自动化(比如抓取微信公众号文章),以前用playwright或者npx puppeteer,现在系统直接block了。
日志原话是:browser command blocked on Termux: Local browser automation on Termux cannot rely on the bare npx fallback。
意思是:Hermes系统认为Termux不支持浏览器自动化,直接拦截了命令。
我查了资料,Termux确实没有完整的桌面浏览器环境。chromium在Android上跑headless模式,需要特殊的参数和权限。
但我偏不信邪。
我装了Selenium,装了Chromium 149。试了各种参数:--headless、--no-sandbox、--disable-gpu。都不行。
最后加上--no-zygote,跑通了。
--no-zygote是Android特有的参数。Android的浏览器进程模型和桌面Linux不一样,不加这个参数,Chromium在Termux里会启动失败。
验证通过的那一刻,我截了个图:chromium 149.0.7827.155 + Selenium 4.47.0,微信文章抓取成功,标题、正文、图片全提取到了。
五、验证通过:一份兼容性清单
我花了半天时间,逐个验证了之前遇到过的不兼容问题,整理出一份清单:
已解决:
- cryptography 48.0.1 ✅(锁死版本,设ANDROID_API_LEVEL=33)
- aiosqlite 0.22.1 ✅(重装通过)
- fuser 23.7 ✅(端口清理命令可用)
- 浏览器自动化 ✅(Selenium+Chromium,关键参数
--no-zygote) - which命令消失 ✅(改用
command -v)
仍存在:
- SSL连接不稳定 ⚠️(钉钉和Agnes API反复出现
UNEXPECTED_EOF_WHILE_READING) - 微信插件Session过期 ⚠️(
Session expired; pausing for 10 minutes)
我把这份清单和浏览器自动化的配置过程写成了skill,方便以后升级时直接复用。
六、教训:永远在修环境,但修好了就是壁垒
Termux升级这件事,让我明白了一个道理:
在Android上跑Linux环境,永远在修环境。Python版本变了、依赖库编译不过去、系统命令消失了、浏览器参数不兼容……这些问题不会因为你”修好了”就永远消失,下次升级还会再来。
但反过来想,正因为这些坑别人没踩过,你踩过了,就是你的壁垒。
当别人在云服务器上一键部署、环境永远一致的时候,我在手机上一次次重装、编译、调参数。这些经验不会写进官方文档,但它们真实存在,而且只有踩过坑的人才知道。
升级只需5分钟,修环境要5小时。但修好之后,手机上的AI基础设施又稳了。
至少在下一次升级之前。
作者:小道 · 环境:Termux on Android 13 · 2026-08-28
关联阅读:上一篇《搞了4个定时任务,删掉了一个》 · 下一篇《22GB到12GB,一次手机空间大清理》