Github运行Python Tox action因use_2to3错误执行失败如何解决?
问题根因
- 核心矛盾是
python-pushsafer==0.4的setup.py中硬编码了已废弃的use_2to3参数,setuptools v58及以上版本彻底移除了对use_2to3参数的支持,只要用v58+的setuptools构建这个包就会触发报错。 - 你虽然在依赖文件中指定了
setuptools==57.4.0,但pip的依赖处理逻辑是先对所有待安装包执行构建前的egg_info校验,再统一安装依赖。校验python-pushsafer时用的是虚拟环境初始化时默认的高版本setuptools,还没等到你指定的低版本setuptools安装,就已经触发了报错。 - 之所以之前运行正常,是因为数月前GitHub Action的默认运行环境中setuptools版本低于58,近期环境更新后默认setuptools版本升级,才导致故障出现。
解决方案
按长期实用性优先级排序可选方案如下:
- 方案1(长期推荐):替换过时依赖
python-pushsafer 0.4已经多年未更新维护,你可以直接调用pushsafer的公开API实现推送功能,仅需几十行代码即可完成替代,彻底规避老包的兼容问题。 - 方案2(无需改业务代码,调整构建顺序)
修改你的tox.ini配置,在安装普通依赖前先降级setuptools版本,只需要在[testenv]块中加入pre_install配置即可:
该配置会让tox在安装其他依赖前先把setuptools降到指定版本,后续构建[testenv] pre_install = pip install setuptools==57.4.0python-pushsafer时就会用低版本setuptools,不会触发报错。 - 方案3(临时兼容):fork依赖包自行修复
你可以forkpython-pushsafer的代码仓库,删除setup.py中的use_2to3相关配置,再把依赖指向你修复后的仓库地址即可。
内容的提问来源于stack exchange,提问作者Laurent Radoux
相关产品推荐
相关产品推荐

