2to3已移除,如何自动将Python 2代码转换为Python 3?
搞定Mac上基于Python 2的Scons旧项目(不用装Python 2)
替代2to3的代码迁移方案
- 用
lib2to3自己写转换脚本:虽然2to3脚本被移除,但lib2to3核心库仍保留在Python 3中,你可以写个简单脚本遍历项目内的.py文件,调用它的转换接口批量处理语法差异。 - 用
futurize/modernize工具:这俩是基于lib2to3的升级版迁移工具,专门针对Python 2转3场景。Mac上先执行pip install future安装futurize,再到项目根目录运行futurize --both --write .,就能自动修复大部分常见语法问题。
让Scons在Python 3下正常运行
- 安装兼容Python 3的Scons版本:Mac上用Homebrew的话直接跑
brew install scons,或者通过pip install scons安装最新版,新版Scons已完全适配Python 3。 - 手动修正Scons脚本的Python 2语法:项目里的
SConstruct、SConscript文件如果有老语法,比如把print "内容"改成print("内容"),xrange()替换为range(),dict.iteritems()改成dict.items(),这些都是高频需要调整的点。 - 处理第三方依赖兼容:如果项目依赖的库仅支持Python 2,优先找对应的Python 3兼容版本;找不到的话可以安装
six库(pip install six),用它做跨版本兼容层,比如用six.iteritems(dict)替代原有的dict.iteritems()。
无需安装Python 2的临时构建方案
- 用Docker隔离环境:拉取包含Python 2和Scons的镜像(比如
python:2.7-slim),将项目目录挂载到容器内,在容器中执行构建命令,本地完全不用安装Python 2。 - 用pyenv临时管理版本:pyenv可以将Python 2安装在用户目录下,不影响系统全局环境。Mac上先执行
brew install pyenv,再跑pyenv install 2.7.18,在项目目录下执行pyenv local 2.7.18即可临时切换到Python 2,构建完成后可以随时切回Python 3,不想保留的话直接用pyenv uninstall 2.7.18删除版本。
内容的提问来源于stack exchange,提问作者Eric
相关产品推荐
相关产品推荐

