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的包管理真的是很垃圾,無法解決依賴,甚至連提示都沒有,超級大坑。手動編譯安裝的確是無奈之舉,但是保證了安裝的可用性,特別要注意編譯時各種庫,特別是開發庫的安裝,才能保證安裝結果的正確性,否則一頭霧水。