Python 3.9.8使用Black时导入typed_ast.ast3报错的其他修复方案
Python 3.9.8 运行Black报错修复方案
报错根因
Python 3.9.8版本移除了内部私有API _PyUnicode_DecodeUnicodeEscape,你当前使用的低版本typed_ast依赖该私有符号,因此触发导入错误,进一步导致Black格式化工具启动失败。
可用修复方案
- 升级Black到21.10b0及以上版本
Black从21.10b0版本开始已经完全移除了对typed_ast的依赖,直接使用Python标准库自带的AST模块,从根源上避免该冲突。如果是pre-commit场景使用,直接修改.pre-commit-config.yaml配置文件中Black的版本号为21.10b0或更高版本,再执行pre-commit autoupdate更新钩子即可生效。 - 升级typed_ast到1.5.0及以上版本
如果你的项目必须保留当前使用的旧版本Black,可以单独升级typed_ast依赖适配Python 3.9.8。直接执行命令pip install typed-ast>=1.5.0即可;如果是pre-commit环境,先执行pre-commit clean清理本地缓存,再重新运行pre-commit钩子,会自动拉取适配新版本Python的typed_ast。 - 保留Python 3.9.8并打兼容补丁(非必要不推荐)
如果既不能降级Python,也无法升级任何依赖,可以手动修改Python 3.9.8的源码,补回_PyUnicode_DecodeUnicodeEscape符号的导出后重新编译Python。该方案修改了Python核心逻辑,可能引入其他未知兼容性问题,仅适用于特殊受限场景。 - 降级Python到3.9.7版本
该方案为临时解决方案,适合无法修改项目依赖的场景,可快速恢复CI流水线运行。
内容的提问来源于stack exchange,提问作者zerocewl
相关产品推荐
相关产品推荐

