天天看點

關于linux下 Python PyQt4安裝的種種坑

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