
我去翻了Stackless Python的代码仓库。页面顶上横着一条灰色提示:这个项目已于2025年2月13日被作者本人锁成只读,不再更新。
然后我算了一遍另一个数:Python 2的官方支持在2020年1月1日到期,到今天2026年8月26日,是2429天。
这两条凑到一起,就是太空网游《EVE Online》8月25日那篇开发日志的全部背景。这款2003年上线、跑了23年、今天还在收月费的老游戏,正式宣布开始把代码从Python 2搬到Python 3。如果你不玩EVE,这篇反而更值得看——你们公司那套“能跑就别动”的老系统,语言未必是Python,剧本一模一样。
它跑的不是普通的Python
这是最容易被漏掉的一层。EVE用的不是官方那个Python,是一个叫Stackless的分支版本。
分支的意思是,有人把官方Python的源码整个拿走,改了核心,自己维护一套。Stackless改的那部分叫tasklet,官方开发日志里翻成“轻量微线程”。说人话:一台服务器要同时伺候几千个玩家,正常做法是给每个人开一条系统线程,几千条线程能把机器压垮;Stackless的做法是让一个服务员端着托盘在几千张桌子之间飞快地转,每桌只停半秒。EVE那种上千人挤在一个星系里互相开火的场面,靠的就是这套东西。
2003年上线时用的就是Stackless,2007年跟着升到2.5,2010年升到2.7。然后就停在那儿了,一停16年。

能拖这么久,是因为它一直能跑
技术债这个词现在被用滥了,它原本的意思很朴素:为了快点上线,你选了一个当时最省事、长远最贵的做法,这笔差价以后要还。
EVE把这笔账压了很多年,理由充分得让人没法反驳——服务器稳定,玩家还在付钱,代码一改就可能炸。CCP这次公开的规模是240万行Python代码,2万个文件。我拿这两个数除了一下,平均每个文件120行,不算离谱,离谱的是总量:2万个文件,每一个都得在Python 2和Python 3两个解释器下各编译一遍,才能知道哪儿会坏。
扫完的结果比我预想的好:95.9%的文件在两个版本下都能编译通过,真正卡住的语法只有大约3300行。反过来按这个比例推,还有大概820个文件两边编不过——这个数是我自己乘出来的,官方没给。
难的不是那3300行
同一次扫描还查出另一组数:大约2万行代码,两个版本下都能顺利编译,但跑起来结果不一样。这才是真正要命的部分。
官方举的例子最典型:写一个1除以2,Python 2给你0,Python 3给你0.5。一个字都不用改,报错也不会报,数就变了。
这就是“升个版本”和“迁移”的差别。打个比方,像照着同一份菜谱换了个厨房,字面上还是“放一杯盐水”,可新厨房的杯子大了四分之一。你没做错任何一步,菜就是咸了。而这道菜是一个跑了23年的经济系统,里面有装备耐久、有战损结算、有玩家真金白银换来的资产。这2万行,得靠人一行行看过去。

撑着的那个分支,已经没人管了
回到开头那条灰条。这才是这件事最值钱的地方,也是我核了半天才敢下的判断。
Stackless最后一个稳定版停在对应Python 3.8的那一版,之后再没往上走。而Python 3.8自己在2024年10月也停止支持了。也就是说,EVE想升级,不存在“把Stackless也一起升上去”这个选项——那条路本身已经断了。
所以这不是换语言版本,是换掉那套支撑并发的核心机制。类比一下:不是给老电梯换个新按钮面板,是电梯井还留着,里面的调度控制器整个抠出来换掉。
CCP自己已经在另一款游戏上把这条路走完了。同一套Carbon引擎的新作《EVE Frontier》,2023年11月先从Stackless 2.7升到Stackless 3.8.1过渡,然后彻底离开Stackless,落到官方的Python 3.12。为了补上tasklet留下的窟窿,他们照公开记录另写了一套基于greenlet的调度器——greenlet是官方Python生态里做同类协作式切换的第三方库,功能对得上,但不是同一个东西,等于把发动机换了型号。这一趟动了400万行Python里的5840个文件、80564行改动,连带100万行C++也得跟着改,复杂场景下换来10%到30%的性能提升。
这里我把边界说清楚:EVE Online这篇开发日志只承认了“《EVE Frontier》已经在现代Python 3上跑我们的引擎,而且跑得通”,并没有点明主服最终落到哪个版本、要不要照搬greenlet那套方案。上面这段路线是我按Frontier的公开技术记录推的,不是CCP对EVE Online的承诺。
玩家这边什么都不会发生
官方对“玩家会受什么影响”的回答只有一句:短期内什么都没有,而且这是刻意设计的。
第一阶段做的全是那种“两个版本都认”的改写——把老掉牙的写法换成2.7和3都接受的等价写法,行为不变。玩家在7月24日到27日的Singularity测试服上试过一轮,8月25日推上正式服。开发者在论坛里的原话是,希望大家上报任何性能问题或者行为异常。至于第三方插件和外部工具会怎样,这篇官方文章一个字没提,我也不替他们回答。

利息一直在扣,只是换了个科目
很多团队对老代码的态度是:不出事就不动,等哪天有空再说。EVE这件事把“有空再说”的真实代价摊开了。
钱没有从预算里直接划走,是从别的地方一点点扣的。先是招人变难,你得找肯天天写Python 2的工程师。然后是上游断供,那些现成的轮子早就只发Python 3的版本,你要么自己养一个老分支,要么原地不动。最硬的一条写在python.org的公告里,措辞相当不客气:2020年1月1日之后,就算有人在Python 2里发现了安全问题,也不会有人去修。这笔账加起来比任何一次迁移都贵,只是不写在同一张纸上。
所以2026年才动手,看着晚,其实一点都不早。Stackless挂上那条灰条的那天,CCP的选择就已经被替它做完了:技术债不是你想还的时候才还,是维护你的那个人先停手,然后由账单来定日程。
资料来源:EVE Online官方开发日志《The Move to Python 3 Begins》(2026-08-25)及官方论坛同名帖、EVE Frontier官方技术说明与Fanfest 2025公开分享、Stackless Python代码仓库归档状态、python.org的Python 2停止支持公告。