问题的由来
今年开始转入Linux平台做开发,相对于win10,Linux的反应速度简直就像坐飞机和做汽车的对比。当然快乐也伴随着痛苦,Windows平台上运行的好好的spyder在Manjaro Linux上一直傲娇的闹情绪,这样那样的问题就一直没怎么断过,折腾了很久终于发现是spyder依赖的PyQt5版本比系统安装的版本低,版本不兼容导致(原谅我这个小白吧……)
Manjaro Linux是ArchLinux的一个发行版,其包管理器仅提供最新版的软件包,而且不提供降级功能。其包管理器中提供的spyder目前是4.1.5版,依赖的PyQt5版本要求<5.13。然额,系统包管理器提供的PyQt5已升级至5.15.1版,而且不提供降级选项,导致从包管理器安装的spyder直接卡死在主界面上,根本没办法工作。
问题的解决
既然包管理器提供的spyder无法解决冲突问题(况且还有其他软件也在依赖PyQt5包,贸然强行降级也可能产生不可预料的结果),就只有放弃包管理器的spyder,转而直接使用pip在用户路径上单独安装spyder及其正确版本的依赖库了。
命令行:
pip install spyder --user
其中的--user
选项表示指示pip将软件包安装到用户路径上(一般是~/.local/lib/site-packages/
,相对的,默认的系统路径一般是/usr/lib/python3.x/site-packages/
)。
安装好后在命令行执行spyder3
,仍然报一大堆的错,最后一行是
qtpy.PythonQtError: No Qt bindings could be found
导致该错误的原因是用户安装路径上缺少PyQt5-sip
包,安装spyder时由于pip检测到系统路径上已经有了这个包,就没有在用户路径上重复安装,然额安装在用户路径上的spyder在启动时要在用户路径上查找这个包,找不到所以罢工了……
解决办法是用pip强制在用户路径上重复安装这个缺失的包,命令行:
pip install PyQt5-sip --user --force-reinstall
完成后执行spyder3
,spyder的主界面终于成功显示出来了……