Ubuntu 14.04下搭建Python3.4 + PyQt5.3.2 + Eric6.0开发平台

时间:2021-02-01 23:01:11

Ubuntu 14.04下搭建Python3.4+Qt5.3+PyQt5.3+Eric6开发平台

安装Python3.4

Ubuntu 14.04默认安装了Python2.7和Python3.4,故这里不讲解Python3.4的安装。

安装Qt5

Ubuntu 14.04自带Qt4的部分库文件,我们这里需要Qt5,所以首先得要安装Qt5
Qt5.3.2下载: http://qt.io/downloads
安装过程:
下载到的是Qt5的离线安装程序,为其赋予可执行权限即可单击启动。

sudo chmod a+x qt-opensource-linux-x86-5.3.2.run
sudo ./qt-opensource-linux-x86-5.3.2.run

Ubuntu 14.04下搭建Python3.4 + PyQt5.3.2 + Eric6.0开发平台
Ubuntu 14.04下搭建Python3.4 + PyQt5.3.2 + Eric6.0开发平台
Ubuntu 14.04下搭建Python3.4 + PyQt5.3.2 + Eric6.0开发平台

配置环境变量
安装完成后配置环境变量,在/etc/profile文件中加入

export QTDIR=/opt/Qt/5.3/gcc/

# if using online install,as follow:
#export QTDIR=/home/username/Qt/5.3/gcc/

export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:${QTDIR}/lib
export PATH=${QTDIR}/bin:${PATH}

# to run pyuic5
export PYTHONPATH=/usr/lib/python3.4/site-packages:$PYTHONPATH

注意${QTDIR}和${PATH}的顺序!因为Ubuntu 14.04默认${PATH}路径中的/usr/bin下存在诸多qt命令(确切地说是指向qtchooser的软连接,qtchooser最终会选择系统自带的Qt4命令,但这些命令默认都不存在),如果${QTDIR}/bin在${PATH}之后,会导致Qt命令失效。
特别是qmake命令,在后续安装中需要用到,保险起见,在终端输入qmake,如果显示qmake命令不存在,请通过创建软连接进行解决:
将/usr/bin下的qmake软连接到/opt/Qt/5.3/gcc/bin/qmake上,或者将/usr/lib/i386-linux-gnu/qt4/bin/qmake软连接到/opt/Qt/5.3/gcc/bin/qmake上:

sudo ln -s /opt/Qt/5.3/gcc/bin/qmake /usr/bin/qmake
#or
sudo ln -s /opt/Qt/5.3/gcc/bin/qmake /usr/lib/i386-linux-gnu/qt4/bin/qmake

此时再输入qmake查看是否设置成功。

安装SIP

SIP是Python调用C/C++库的必备模块,因此SIP是PyQt的依赖工具,安装PyQt之前必须先安装对应版本的SIP。PyQt编译时使用的SIP版本必须与Python默认调用的SIP保持一致!否则Python中时无法调用PyQt的。这里我们使用的SIP版本是4.16.3
Ubuntu 14.04中貌似是自带4.15版本的SIP(或者是自己安装Python扩展时自动安装的)。终端输入:

sip -V

查看已安装SIP版本,如存在其他版本,请查看python3的dist-packages目录下是否存在sip相关文件。如果存在将其删除:

sudo rm /usr/lib/python3/dist-packages/sip*

然后开始正式安装SIP-4.16.3
SIP 4.16.3下载 http://www.riverbankcomputing.com/software/sip/download
安装过程:

tar -zxvf sip-4.16.3.tar.gz
cd sip-4.16.3
python3 configure.py
make
sudo make install

SIP配置过程:
SIP无需配置,只是需要安装完成后注意核对一下版本:
分别在终端输入:

sip -V

在python3环境输入:

>>>import sip
>>>print(sip.SIP_VERSION_STR)

查看两者显示的版本是否一致,如不一致,需要重新执行上述删除过程和安装过程。版本不一致将意味着后面编译PyQt所使用的SIP和Python3调用的SIP不一致,导致在Python3中调用PyQt的相关模块(from PyQt5 import QtCore)出现类似如下的错误:

the sip module implements API v11.0 but the PyQt5.QtCore module requires API v11.1

安装PyQt5

PyQt是Python的一个跨平台图形开发工具集,是Python与Qt的成功融合。PyQt包含了大约440个类、超过6000个函数和方法,非常强大。这里我们安装PyQt5.3.2
PyQt5.3.2下载 http://www.riverbankcomputing.com/software/pyqt/download5
安装过程:

tar -zxvf PyQt-gpl-5.3.2.tar.gz
cd PyQt-gpl-5.3.2
python3 configure.py

注意:此命令生成各种Qt模块后,其中的QtWebKitWidgets模块由于Qt4和Qt5的qprinter.h所属模块的调整(Qt4存在与QtGui中,Qt5将其调整到QtPrintSupport中了),QtWebKitWidgets的Makefile中缺失了对QtPrintSupport的头文件目录引用,会导致后面编译PyQt5时无法找到qprinter.h头文件,编译失败(编译过程非常漫长):

qprinter.h: No such file or directory

所以需要向刚生成的QtWebKitWidgets模块源文件的Makefile文件的INCPATH中添加QtPrintSupport引用。
原INCPATH为:
INCPATH = -I/opt/Qt/5.3/gcc/mkspecs/linux-g++ -I. -I. -I/usr/include/python3.4m -I/opt/Qt/5.3/gcc/include -I/opt/Qt/5.3/gcc/include/QtWebKitWidgets -I/opt/Qt/5.3/gcc/include/QtWebKit -I/opt/Qt/5.3/gcc/include/QtWidgets -I/opt/Qt/5.3/gcc/include/QtNetwork -I/opt/Qt/5.3/gcc/include/QtGui -I/opt/Qt/5.3/gcc/include/QtCore -I.
修改为:
INCPATH = -I/opt/Qt/5.3/gcc/mkspecs/linux-g++ -I. -I. -I/usr/include/python3.4m -I/opt/Qt/5.3/gcc/include -I/opt/Qt/5.3/gcc/include/QtWebKitWidgets -I/opt/Qt/5.3/gcc/include/QtWebKit -I/opt/Qt/5.3/gcc/include/QtWidgets -I/opt/Qt/5.3/gcc/include/QtNetwork -I/opt/Qt/5.3/gcc/include/QtPrintSupport -I/opt/Qt/5.3/gcc/include/QtGui -I/opt/Qt/5.3/gcc/include/QtCore -I.
或者可以直接在QtWebKitWidgets模块源文件的QtWebKitWidgets.pro文件中加入:
QT += printsupport
也行。
接下来执行编译安装:

make
sudo make install

配置过程:
安装完成后进入python3环境验证是否安装成功:

>>>import PyQt5

如果提示不存在PyQt5模块,表示安装的PyQt5没有被python3正确识别。默认的安装路径为python的site-packages目录。通常python3的模块安装路径会分成2个,一个/usr/lib/python3,一个/usr/lib/python3.4,两个路径下的模块都能被python3环境正确调用,但是python3.4的site-packages目录下的模块貌似无法调用。PyQt5偏偏默认安装到此目录了。解决办法是为其创建软连接,保险起见,python3目录和python3.4目录分别创建一个:

sudo ln -s /usr/lib/python3.4/site-packages/PyQt5
sudo ln -s /usr/lib/python3.4/site-packages/PyQt5 /usr/lib/python3/dist-packages/PyQt5

可能不同的计算机上可识别的模块安装目录会存在差异,但是解决原理都差不多,在Python3可识别模块的路径下创建PyQt5的软连接即可让python3成功识别。
另外一个解决办法是在python3 configure.py时就指定安装目录。如:

python3 configure.py --destdir /usr/lib/python3.4

安装QScintilla2

QScintilla2是连接编译器和Python的接口,因此是Eric的必须前置组件。QScintilla2中需要单独安装3个模块,本体、Designer和Python Bingdings。

QScintilla2.8.4下载:
下载地址: http://www.riverbankcomputing.com/software/qscintilla/download
安装过程

tar -zxvf QScintilla-gpl-2.8.4.tar.gz
cd QScintilla-gpl-2.8.4

(1)安装本体

cd Qt4Qt5
qmake qscintilla.pro
make
sudo make install

(2)安装Designer

cd designer-Qt4Qt5
qmake designer.pro
make
sudo make install

(3)安装Python Bingdings

cd Python
python3 configure.py --pyqt=PyQt5
make
sudo make install

以上步骤即可正确安装QScintilla2 。需要注意的是Python Bingdings安装时需要指定–pyqt=PyQt5参数,否则默认是为PyQt4安装。或者直接修改其configure.py,将pyqt5_is_default=False改为pyqt5_is_default=True也可。

配置过程
无需额外配置

安装Eric6

Eric作为一款强大的开源Python IDE,支持Qt界面设计器的Eric在Python GUI开发中更是首屈一指,Python+PyQt+Eric已经成为一种标准的Python GUI开发平台。其中Eric4支持Python2.6+PyQt4.6组合,Eric5支持Python3.0+PyQt4.8组合,Eric6支持Python3.0+PyQt5.0组合。
Eric6-6.0.11下载:
下载地址: http://sourceforge.net/projects/eric-ide/files/eric6/stable/
下载6.0.11版本的eric6-6.0.11.tar.gz主文件和eric6-i18n-zh_CN.GB2312-6.0.11.tar.gz中文语言包
安装过程:

tar -zxvf eric6-6.0.11.tar.gz
tar -zxvf eric6-i18n-zh_CN.GB2312-6.0.11.tar.gz
cd eric6-6.0.11
sudo python3 install.py //安装主程序
sudo python3 install-i18n.py //安装中文语言包

此时会出现无法安装错误,详见错误2

需要注意,由于是以root身份安装(sudo),所以运行时需要执行: sudo eric6 才不会导致Eric运行或者关闭时写入配置文件出错。为了保证直接执行: eric6 时不至出错,可以将当前用户的eric6目录权限设置为可读写:

sudo chmod a+w -R ~/.eric6
sudo chmod a+w -R ~/.config/Eric6

或者安装时就直接

python3 install.py
python3 install-i18n.py

就无需sudo执行了。但是不推荐这样做。

安装错误详解

错误1:

strip /usr/bin/pyuic5
strip:/usr/bin/pyuic5: 不可识别的文件格式
make: [install_pyuic5] 错误1 (忽略)

在/etc/profile文件中加入PyQt5的路径到PythonPath

export QTDIR=/opt/Qt/5.3/gcc/
export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:${QTDIR}/lib
export PATH=${QTDIR}/bin:${PATH}
export PYTHONPATH=/usr/lib/python3.4/site-packages:$PYTHONPATH

错误2:
开始安装eric6,当输入sudo python3 install.py 时,控制台的输入会显示出这样的信息:

Checking dependencies
Python Version: 3.4.3
Found PyQt5
Sorry,please install QScintilla2 and its PyQt5/PyQt4 wrapper.
Error: cannot import name 'Qsci'

显示无法导入模块Qsci错误。经过上述步骤,QScintilla2已经安装到了系统中了,为什么还显示没有安装成功呢?PyQt5默认安装在了/usr/lib/python3.4路径下,而Qsci模块则安装在了/usr/lib/python3.4/PyQt5路径下,导致安装eric6时无法找到模块Qsci。
解决办法则是为Qsci模块创建软连接:

sudo ln -s /usr/lib/python3.4/site-packages/PyQt5/Qsci.so /usr/lib/python3.4/PyQt5/

问题解决,继续安装即可。

参见: