如何更新 PyQt5?

Posted

技术标签:

【中文标题】如何更新 PyQt5?【英文标题】:How do I update PyQt5? 【发布时间】:2014-12-29 23:36:06 【问题描述】:

我的 Xubuntu (Voyager) 上安装了明显较旧版本的 PyQt5。当我打印PYQT_VERSION_STR 时,它显示:'5.2.1'。我在这里下载了最新的 PyQt5 发布表格:http://sourceforge.net/projects/pyqt/files/PyQt5/PyQt-5.4/ 我配置它,制作并安装它,一切都按计划进行。但是,如果我再次打印PYQT_VERSION_STR,它仍然会输出'5.2.1'

如何告诉我的python3.4使用更新版本?

(重新安装新版本不应该覆盖另一个吗?我不明白为什么它仍然显示5.2.1作为版本字符串。)

编辑#1:

sys.path: ['', '/home/user/.pythonbrew/lib', '/usr/lib/python3.4', '/usr/lib/python3.4/plat-x86_64-linux-gnu', '/usr/ lib/python3.4/lib-dynload', '/usr/local/lib/python3.4/dist-packages', '/usr/lib/python3/dist-packages']

PyQt5.__file__ '/usr/lib/python3/dist-packages/PyQt5/init.py'

看来我的 python 正在使用存储库中的版本,除非它是在 make 安装时安装的位置。

编辑 #2:

似乎PYQT_VERSION_STR返回了PyQt5配置和make安装之前找到的Qt版本(!)。所以实际问题似乎出在我的 Qt5 版本上,根据 PyQt5 的python configure 的输出是5.2.1

Querying qmake about your Qt installation...
Determining the details of your Qt installation...
This is the GPL version of PyQt 5.4 (licensed under the GNU General Public License) for Python 3.4.0 on linux.

Type 'L' to view the license.
Type 'yes' to accept the terms of the license.
Type 'no' to decline the terms of the license.

Do you accept the terms of the license? yes
Found the license file pyqt-gpl.sip.
Checking [...]


DBus v1 does not seem to be installed.
Qt v5.2.1 (Open Source) is being used.
The qmake executable is /usr/bin/qmake.
Qt is built as a shared library.
SIP 4.16.5 is being used.
The sip executable is /usr/bin/sip.
These PyQt5 modules will be built: QtCore, QtGui, QtNetwork, QtOpenGL,
QtPrintSupport, QtQml, QtQuick, QtSql, QtTest, QtWidgets, QtXml, QtDBus, _QOpenGLFunctions_2_0.

The PyQt5 Python package will be installed in /usr/lib/python3.4/site-packages.
PyQt5 is being built with generated docstrings.
PyQt5 is being built with 'protected' redefined as 'public'.
The Designer plugin will be installed in
/usr/lib/x86_64-linux-gnu/qt5/plugins/designer.
The qmlscene plugin will be installed in
/usr/lib/x86_64-linux-gnu/qt5/plugins/PyQt5.
The PyQt5 .sip files will be installed in /usr/share/sip/PyQt5.
pyuic5, pyrcc5 and pylupdate5 will be installed in /usr/bin.
The interpreter used by pyuic5 is /usr/bin/python3.
Generating the C++ source for the QtCore module...
Embedding sip flags...
Generating [...]

Re-writing
/home/xiaolong/Downloads/PyQt-gpl-5.4/examples/quick/tutorials/extending/chapter6-plugins/Charts/qmldir...
Generating the top-level .pro file...
Making the pyuic5 wrapper executable...
Generating the Makefiles...

所以 PyQt5 进入了正确的目录,但 Qt5 的实际版本早于 5.4。现在问题似乎变成了“如何更新我的 Qt5 版本?”除非我在这里误解了什么。

编辑#3:

sys.executable的输出:

Python 3.4.0 (default, Apr 11 2014, 13:05:11) 
[GCC 4.8.2] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> sys.executable
'/usr/bin/python3'
>>> 

编辑#4:

我的.bash_aliases 文件的内容: alias python=python3 alias pip=pip3

【问题讨论】:

您是否尝试过apt-get update 后跟apt-get upgrade 是的,我几乎每天都这样做 :) 但是存储库中的版本比我现在编译和安装的 source forge 的最新版本旧。 问题可能是 Ubuntu 将其(旧)版本放在 PYTHONPATH 上,从那里放置您本地安装的(较新)版本。检查加载旧 PyQt 版本的__file__ 与安装新版本的目录,以及sys.path 中的目录顺序。 sys.path 似乎除了站点包之外没有任何其他目录:['', '/home/user/.pythonbrew/lib', '/usr/lib/python3.4', '/usr/lib/python3.4/plat-x86_64-linux-gnu', '/usr/lib/python3.4/lib-dynload', '/usr/local/lib/python3.4/dist-packages', '/usr/lib/python3/dist-packages'] 如何检查从中加载它的__file__ 您来自交互式 Python 解释器的 import PyQt5,并显示 PyQt5.__file__ 【参考方案1】:

编辑

我一直假设最初 cmets 对您的问题提出的建议对您不起作用,因此我猜想您的系统上必须安装第二个 python。但是在再次阅读所有内容后,您似乎并没有按照给出的所有提示进行操作。

看起来这只是dist-packagessite-packages 的一个例子。在基于 Debian 的系统上,发行版提供的 python 包安装在dist-packages,而用户安装的包通常安装在site-packages。这样做是为了最大限度地减少破坏依赖特定版本 python 包的其他系统应用程序的机会。

PyQt5 配置脚本的输出显示您已将其安装到site-packages

The PyQt5 Python package will be installed in /usr/lib/python3.4/site-packages.

但是那个目录没有出现在你的sys.path中,所以python不能从那个位置导入包。

有几种方法可以解决此问题,但有些方法比其他方法“更安全”。例如,您可以通过各种方式操作 python 路径,但这样做有影响 所有 python 应用程序(包括使用 python2 的应用程序)的重大缺点,因此最好避免这样做。

由于可能很少有系统应用程序依赖于 PyQt-5.2.1,所以应该可以简单地覆盖它。为此,请通过如下配置重新编译并安装 PyQt-5.4:

    python3 configure.py --destdir=/usr/local/lib/python3.4/dist-packages

或者,您可以卸载系统 PyQt5 包(使用 apt-get 或其他),并通过如下配置完全替换它:

    python3 configure.py --destdir=/usr/lib/python3/dist-packages

作为最后一步,您可能应该通过从/usr/lib/python3.4/site-packages 中删除多余的PyQt5 目录来整理内容。

【讨论】:

在某些时候我改变了它,命令行上的python 链接到我的python 3.4。当我运行 python shell 时,它确认它是 3.4。我更新了我的问题,不确定我是否应该为此提出新问题。在这样做之前必须研究如何更新我的 Qt5 版本。 @Zelphir。 PYQT_VERSION_STR 变量是一个静态字符串:它绝对不会被任何其他值更新。另外:如果 PyQt5 针对 Qt-5.2.1 编译没有错误,则应该没有立即升级 Qt 本身的需要。当您说“链接到我的 python 3.4”时,这究竟是什么意思?你有单独的python安装吗?如果是,sys.executable 返回什么?

以上是关于如何更新 PyQt5?的主要内容,如果未能解决你的问题,请参考以下文章

如何实时更新 PyQt5 标签?

如何在 PyQT5 上更新 QLCDNumber 的值?

PyQt5 如何在编译后更新资源文件?

如何使用串行向我的 PyQt5 窗口添加实时(更新)图?

如何设置 PyQt5 Qtimer 在指定的时间间隔内更新?

输入用户数据时如何更新 Matplotlib 中的绘图(通过 PyQt5 按钮)