解决PyCharm运行Django测试套件时的exit code 139 (SIGSEGV)错误
我之前碰到过好几例类似的情况——本地用PyCharm跑全量Django测试时触发段错误,单测却正常,CI环境完全没问题,结合你已经试过的方案,给你几个更精准的排查和解决思路:
清空PyCharm缓存与索引
旧缓存和索引不匹配是这类莫名崩溃的常见原因,尤其是你用的2019.2.4版本不算太新。操作路径:File -> Invalidate Caches...,勾选「Clear file system cache and local history」,然后重启PyCharm。重启后让它重新构建索引,再跑测试试试。切换测试运行方式
别用PyCharm自带的默认测试 runner,换两种方式验证:- 直接在终端用Django原生命令跑全量测试:
python manage.py test,如果终端跑没问题,那100%是PyCharm的测试 runner 有问题; - 在PyCharm的
Run/Debug Configurations里,把测试配置改成「Django tests」,指定用项目的manage.py执行,或者如果装了pytest,改成「Python tests -> pytest」作为运行器。
- 直接在终端用Django原生命令跑全量测试:
升级PyCharm到稳定新版本
你用的2019.2.4版本比较陈旧,JetBrains在后续的2020+版本里修复了大量Python调试、测试相关的崩溃Bug。建议升级到最近的稳定版(记得备份项目配置),版本兼容性问题很可能是根源。重建Python虚拟环境
虽然单测正常,但全量测试可能触发了虚拟环境中隐藏的依赖损坏或冲突。尝试重新建一个干净的虚拟环境:# 删除旧虚拟环境 rm -rf your_venv_name/ # 创建新的3.7虚拟环境 python3.7 -m venv your_venv_name # 激活环境 source your_venv_name/bin/activate # 重装所有依赖 pip install -r requirements.txt之后再在PyCharm里指定这个新环境跑测试。
禁用第三方插件
某些第三方插件(比如代码覆盖率、性能分析类)可能和测试运行器冲突,导致段错误。可以先去Settings -> Plugins里禁用所有非JetBrains官方的插件,重启PyCharm后再跑测试,排查是否是插件导致的问题。
既然CI环境完全正常,说明代码和依赖本身没有问题,把排查重点放在本地PyCharm的配置、缓存和环境适配上面,按上面的步骤一步步来,应该能解决这个问题。
内容的提问来源于stack exchange,提问作者jdinunzio

