Python 2 到 Python 3 迁移实战:我们是怎么做的

Python 2 的 EOL(End of Life)定在 2020 年 1 月 1 日。我们团队从 2019 年中开始规划迁移,历时约半年完成。这里记录一下整个过程中遇到的问题和解决方案。 为什么不能拖 很多团队的心态是"能跑就行,等依赖库停止支持再说"。但现实是: 安全补丁不再提供,线上系统面临风险 新的第三方库越来越多只支持 Python 3 招进来的新人都不熟 Python 2,维护成本越来越高 迁移前的准备 用 2to3 扫描 Python 官方提供了 2to3 工具,可以扫描出大多数需要改动的地方: 2to3 -l # 列出所有可用的修复器 2to3 -f all your_project/ --no-diffs # 只扫描不修改,看有多少问题 用 pylint 或 pyupgrade 批量处理 pip install pyupgrade # 批量转换为 Python 3.6+ 语法 find . -name "*.py" | xargs pyupgrade --py36-plus 最常见的改动点 print 语句 # Python 2 print "hello" print "hello", "world" # Python 3 print("hello") print("hello", "world") integer 除法 # Python 2:整数除整数 = 整数 5 / 2 # 结果是 2 # Python 3:真除法 5 / 2 # 结果是 2.5 5 // 2 # 整除,结果是 2 这个坑最隐蔽,2to3 不会自动处理,需要手动审查所有除法运算。 ...

2019-11-20 · 2 min · Kada Liao