1. 程式人生 > >在Ubuntu 14.04 64bit上安裝python-pyqt5軟體包(python 2.7)

在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。

SIP是C/C++繫結生成器,是一個自動為C和C++庫生成Python擴充套件模組的工具。為了方便開發PyQt,SIP於1998被“Riverbank Computing”公司創造出來。不過,SIP不專用於PyQt,而是適用於所有的C和C++庫。 使用SIP時,程式設計師首先要編寫一個特殊的".sip"檔案,使用類似於C++的語法在其中描述擴充套件模組所提供的型別與函式。然後用SIP將這個檔案轉化為C++程式碼。最終編譯,與C、C++庫連結後就成為Python擴充套件模組。".sip"檔案類似於C、C++的標頭檔案。根據需要,需要程式設計師用SIP定義的語法新增一些C++程式碼中沒有的資訊。因為SIP不支援完整的C++語法,所以不能直接使用C++的標頭檔案作為".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.py
make 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+度,持續十多分鐘。



四、安裝中遇到的問題 問題1
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_())

執行效果截圖


六、參考文獻