【问题标题】:Best Practice for PyQt for incremental migration from Python 2.7 to 3.xPyQt 从 Python 2.7 到 3.x 的增量迁移的最佳实践
【发布时间】:2019-10-09 23:35:21
【问题描述】:

我正在更新代码以兼容 Py2/Py3。一些原始的 Python 2.7 代码使用 PyQt4。我们将在用户系统上增量实施的标准 Python 3.7 安装与 PyQt4 不兼容。

在我的研究中,我发现了许多使 Python 2.7 与 PyQt5 很好地配合的各种复杂且经常令人费解的方法,但这是一个站不住脚的解决方案,因为交叉兼容性更新的全部原因是:

  • 系统未更新的用户可以继续使用更新后的模块/包
  • 开发人员只需维护一个版本,而不是 Py2 版本 Py3 版本

我根本没有发现任何有助于使 Python 3.7 与 PyQt4 对话的方法,因此向后兼容的解决方案虽然更可取,但似乎也站不住脚,除非我(希望)弄错了。

另一种选择是修改代码以检查 Python 版本并使用 if/else 或 try/except 语句进行相应的导入。

我想知道对于 PyQt4/5 的交叉兼容编码最好和最简单的方法是什么,以便用户(其中​​大多数不是开发人员)更新几乎没有困难,并且不需要进行更改以在他们的系统为他们更新之前继续使用更新的程序。

【问题讨论】:

  • Qt4 和 PyQt4 都已过时,不再受支持。 Python2 很快就会出现同样的情况。仍然依赖这些库的任何系统都已经从根本上被破坏了
  • @ekhumoro - 谢谢。这就是我们(最终)进行更新的原因。但是,由于用户众多,我们被要求先对代码进行更改,然后将用户的计算机逐一更新为 Py3。尚未更新的用户将使用与已更新用户相同的代码库,因此开发人员(仍会随着需求的变化对代码进行频繁的更新和修改)只需要维护一个版本 - 所以这一切都需要交叉兼容。这一切都将在几个月内完成并没有实际意义,但现在我想就最好的方法获得专业意见。

标签: python-3.x python-2.7 migration pyqt5 backwards-compatibility


【解决方案1】:

虽然 [Py]Qt4 已过时,但我知道,在某种大型或特定环境中,在不久的将来无法或轻松完成系统更新。 我建议您使用Qt.py,这是一个“垫片”,可以(几乎)透明地为 Python 2 和 3 使用所有 Qt 绑定(PySide 1/2 和 PyQt 4/5)。

总体好处非常简单:您将能够使用 PyQt5 就绪的代码,同时保持它在仍然必须依赖 PyQt4 的旧系统上可用。

您需要做的最重要的工作是将所有 QWidget 子类更改为 QtWidgets 模块而不是 QtGui 的一部分,并记住 Qt.py 自动尝试使用 sip API v2(这使得所有 toPyObject 转换都不必要并且更加透明)。
请记住,有些类需要从当前绑定中手动导入,显然在行为上存在一些差异,但除此之外,这将使整个迁移更加容易。

【讨论】:

    猜你喜欢
    • 2020-02-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-06
    • 2016-09-09
    • 1970-01-01
    • 1970-01-01
    • 2023-03-25
    相关资源
    最近更新 更多