你打开电脑,准备运行一个Python脚本。结果发现,依赖包报错了。你一看提示,某个库已经不再支持Python 3.6。你叹了口气,心想“又来了”。
这不是个别现象。从2021年起,很多主流库就陆续停止支持3.6了。 NumPy在1.24版本彻底放弃它。Pandas的1.5系列是最后的温柔。Django和Flask等Web框架更早就不带3.6玩了。你用3.6写的代码,就像一辆只能加92号汽油的老车。路上的加油站全改卖95号了。你连油门都踩不下去。
你可能觉得“3.6够用了”。真的吗?你错过的东西比你想的多。 3.8加入了海象运算符。这个符号可以让你在表达式内部给变量赋值。比如if (n := len(a)) > 10,一步完成计算和判断。你还在写两行代码?3.9支持了字典合并操作符。比如dict1 | dict2,一行就能合并字典。不用循环update了。3.10带来了模式匹配。那个叫match-case的语法,能让你像写Switch一样处理数据结构。处理JSON或者解析命令的时候,代码变得干净利落。
更实在的是性能问题。每个版本升级都伴随着解释器优化。3.11比3.6快了将近60%。 这个数字不是吹的。很多项目迁移后,计算密集型任务直接提速。你还在等代码跑完?你可能喝杯咖啡回来它还在转。换个新版本,咖啡还没泡好就跑完了。
别忘了安全性。老版本没有安全补丁。3.6在2021年底就停止接收任何修复了。 你写的是不是联网程序?只要项目暴露在公网,就有漏洞风险。黑客最喜欢你这种“怀旧”用户。你把后门敞开着,他们不进来都对不起自己的工具包。
有人害怕升级。觉得迁移代码麻烦。这是真的。很多老项目底层用了过时的API。比如字符串格式化还在用%号。文件路径拼接还在用os.path。但这些东西在新版本里也不是不能用。它们只是不推荐了。你完全可以在新版里继续用旧语法。 代码照样跑。不用一次改完。你先把运行环境升上去,拿到性能和安全红利。再慢慢重构代码。没人逼你一天完成。
我教过不少学生。他们一开始也死守老版本。理由很一致:“习惯了”。后来有个学生要做一个爬虫。他用的库对3.6不支持。整整折腾了两天。后来我帮他换了3.10版本,半小时跑通。他跟我说:“老师,原来世界这么顺滑。” 现在他们组全员用3.12了。
Python 3.13已经在路上了。它增加了一个叫“自由线程”的实验特性。能充分利用多核CPU。你还在用一个单核都不一定能跑满的老版本? 这跟用算盘做加减法有什么差别?工具在进步。人也得跟着走。版本号从3.6跳到3.13,中间差了7个大版本。你错过的新特性不是几个,是一大把。
你今天就可以动手。下载最新版,装个虚拟环境。把你现在写的脚本放进去跑一遍。发现问题再修。几个小时后你就能感觉到变化。代码跑得更快,报错信息更友好,第三方库基本都能装。
别等了。你又不是在保护文物。代码该升级就升级。