Python语言功能强大、方便易用,但是在使用上却总是有很多坑,除了python2和python3的兼容性饱受诟病外,python各种包的安装管理也是一个容易让初学者感到无比困惑的东西。几天前研究基于python的网页抓取工具:spynner,据说是一个功能强大的工具,但是需要安装PyQt4,安装过程中走了很多弯路,也体会到python包管理存在的一些弊端。总结了一些经验,给大家分享一下:
spynner的安装并不费劲,从网上下载打包文件,解压后按照指示,运行:
python setup.py install
顺利实现了安装。
从网上下载了一些案例程序,实现对百度网页的抓取:getwebpage.py. 在运行时报错,开始是说无法处理unicode编码,后来根据网上的指示卸载了一个包(名字我忘了),卸载后,这个错没有了,反而出现更奇怪的错误:
from PyQt4.QtWebKit import QtWebView: no module name QtWebKit
说是没有QtWebKit这个模块,这个模块是在PyQt4这个包里的。于是重新安装这个包,我的Linux系统是deepin,一个国产debian类似的系统,先是用:
apt-cache search pyqt
查找pyqtt包,然后使用:
sudo apt-get install python-qt4
安装PyQt4,后来发现还是不行,期间还折腾过easy_install, pip等python的包管理,发现根本找不到pyqt4这个包。无奈放了两天,冷静思索了一下,记起python里面可以通过help查看包的状态,于是运行python,进入命令行:
>>>help('module PyQt4')
列出了PyQt4所有的模块列表,仔细一看,我安装的PyQt包里面根本就没有QtWebKit这个模块!上网查了一下,这个需要源码编译安装PyQt4包,而且,必须有已经安装好的QT4库和qtwebkit库,才会编译安装QtWebKit,否则就被忽略掉了!而且必须有开发库(c++的)才行,运行命令:
dpkg -l|grep qtwebkit
发现libqtwebkit4 库已经安装了,这时候千万不能大意,还要确认libqtwebkit-dev这个库在不在,如果不在,就要运行:
sudo apt-get install libqtwebkit-dev
安装上它,否则还是会在PyQt4编译安装时忽略掉(这决对是个大坑!)此外,还要注意确保已经安装了sip,python C/C++支持库。
安装完库后,到PyQt4源代码目录里,运行:
python configure.py
运行后会生成make文件,然后运行:
make
sudo make install
make要花很长时间,库很多要十几分钟。完成安装后,进入python命令行运行:
>>>help('modules PyQt4')
可以看到,列表里面已经有QtWebKit模块了。再次运行spynner工具,成功搞定,一切OK!
最后总结一下,Python的包管理真的是很垃圾,无法解决依赖,甚至连提示都没有,超级大坑。手动编译安装的确是无奈之举,但是保证了安装的可用性,特别要注意编译时各种库,特别是开发库的安装,才能保证安装结果的正确性,否则一头雾水。