在Ubuntu 14.04 64bit上安裝python-pyqt5軟體包(python 2.7)
一、摘要
python-pyqt5 軟體包是做什麼的,我在Ubuntu 14.04 64bit上該如何安裝呢?
pyqt5 python的GUI開發包。也就是跨平臺的圖形化開發包
http://www.riverbankcomputing.com/software/pyqt/download5
下載安裝即可。安裝的過程很漫長,繁雜,特將踩坑過程記錄出來。另外,這可能是目前為止網上最好的一篇pyqt5的安裝筆記,比其它同類安裝過程都簡潔。
二、簡介
PyQt是Qt庫在Python的繫結版本,PyQt為我們Python程式設計師提供了使用完整Qt應用程式介面,幾乎可以用Python做任何C++能做的事。作為一種程式語言,python相對於c++的優點是在程式設計效率上。
PyQt(Python的GUI模組)既成熟又穩定,並且有龐大使用者的群體,我從使用者那兒得到的兩個最普通的反饋是它恰到好處和它很簡單易用。
PyQt 5.4.2版本最新發布了,Qt 庫的Python繫結。這個版本已經完美的支援 Qt v5.2.1了,包括最新新的元件QtBluetooth、QtPositioning、QtMacExtras、QtWinExtras 和 Qt11Extras 模板等。
PyQt5支援Python v2.6, v2.7 and v3.
配置PyQt5之前,必須首先安裝SIP。
三、安裝
1.安裝QT庫(含QT4和QT5)
sudo apt-get install qt-sdk
下載的軟體包很大
如果自己編譯QT庫,那就需要手動修改路徑
cd /usr/lib/x86_64-linux-gnu/qt-default/qtchooser/
會有一個default.conf配置檔案,可以修改預設配置檔案為你編譯好的QT庫路徑
2.安裝SIP
從官網
下載最新穩定的tar.gz原始碼包,當前版本是sip-4.16.8.tar.gz,並解壓
python configure.pymake sudo make install
安裝完成後,立即檢視sip版本 sip -V
3.安裝PyQt5
建議從官網
下載原始碼包,不要從github上
下載原始碼,因為編譯有問題,參見遇到的問題4.
解壓原始碼後,進入原始碼目錄,執行
python configure.py --sip-incdir=/usr/include/python2.7
make -j4
sudo make install
編譯過程很漫長,我的頂配ThinkPad T420溫度飆到80+度,持續十多分鐘。
qmake: could not exec '/usr/lib/x86_64-linux-gnu/qt4/bin/qmake': No such file or directory
出錯原因,沒有安裝qt4庫,執行
sudo apt-get install qt-sdk
問題2
Error: Make sure you have a working sip on your PATH or use the --sip argument to explicitly specify a working sip.
沒有事先安裝SIP,先去安裝SIP吧
問題3
sipAPIQtCore.h:28:17: fatal error: sip.h: 沒有那個檔案或目錄
沒有指定sip.h所在路徑,configure時使用 python configure.py --sip-incdir=/usr/include/python2.7
參考連結
https://shenwang.blog.ustc.edu.cn/huhamhire-hosts/
問題4
qpyopengl_add_constants.o:在函式‘qpyopengl_add_constants(_object*)’中:
qpyopengl_add_constants.cpp:(.text+0x0): `qpyopengl_add_constants(_object*)'被多次定義
qpyopengl_add_constants.o:qpyopengl_add_constants.cpp:(.text+0x0):第一次在此定義
collect2: error: ld returned 1 exit status
make[1]: *** [libQtGui.so] 錯誤 1
make[1]:正在離開目錄 `/home/taoyx/program_develop/pyqt5/QtGui'
仔細研究發現該QtGui目錄下有兩個同名檔案並且實現程式碼完全相同, 不同之處僅是:
qpyopengl_add_constants.cpp,使用defined(SIP_FEATURE_PyQt_OpenGL)控制
qpyopengl_add_constants.c 沒有使用巨集控制
問題應該是禁用該巨集才不會導致該問題
將qpygui.pro中的qpyopengl_add_constants.c註釋掉,發現行不通,還有其它幾種做法,折騰了一陣,還是搞不定,放棄了。經過網上資料 說,github上的版本編譯不過去,改為從官網下載就ok了 五、編寫demo驗證
先驗證PyQt4和PyQt5模組是否能成功載入?
編寫一個python指令碼,然後使用python helloworld.py驗證就可以了。
#!/usr/bin/env python
#encoding: utf-8
import sys
from PyQt5 import QtCore, QtGui, QtWidgets
if __name__ == '__main__':
app = QtWidgets.QApplication(sys.argv)
w = QtWidgets.QWidget()
w.resize(250, 150)
w.move(300, 300)
w.setWindowTitle('helloworld')
w.show()
sys.exit(app.exec_())
執行效果截圖
六、參考文獻