升级只需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,一次手机空间大清理》