Q100715:如何解决 Nuke 16+ 中的 Python PySide 问题

症状

启动Nuke 16 或更高版本时,如果您有使用 PySide2 的自定义 Python 代码,则启动时会遇到错误,因为插件运行失败:

如果您是通过命令提示符或终端启动的,那么您也会看到类似这样的错误信息: ModuleNotFoundError: No module named 'PySide2'


原因

随着Nuke 16 中VFX 参考平台 2024的更新,PySide 库也更新为 PySide6。这意味着 PySide 模块现在有了新的导入名称。

这与Nuke 11 在 VFX Reference Platform 2017 更新中从 PySide 迁移到 PySide2 的情况类似。更多信息请参阅我们的文章: Q100398:如何在Nuke 11+ 中解决使用 PySide Python 脚本的问题

解决

为了解决这个问题,你的代码需要更新以与 PySide6 兼容。

在许多情况下,您可以替换:

import PySide2

和:

import PySide6

这应该可以解决绝大多数问题,因为与从 PySide 升级到 PySide2 不同,这次升级没有大的模块更改。

一个可能会影响用户的显著变化是, QAction类已从PySide2.QtWidgets移至PySide6.QtGui ,后者用于Nuke界面中的菜单操作。

如果您使用了受影响的模块或函数,您的代码中可能还需要进行一些其他更改。更多信息请访问 Qt for Python 的网站: https://doc.qt.io/qtforpython-6/faq/porting_from2.html

或者,您可以使用第三方Qt.py来帮助映射所有不同的 PySide/PyQt 库版本,使您的代码与库版本无关。

例如这样的句子:

from PySide2 import QtWidgets, QtCore, QtGui

将成为:

from Qt import QtWidgets, QtCore, QtGui

只要Qt.py已添加到您的Nuke路径中,您就可以在不同的Nuke版本之间导入该模块,而无需修改代码以适应特定Nuke版本。Qt.py可在 GitHub 上找到: https://github.com/mottosso/Qt.py

注意:Qt.py 项目由第三方创建,因此,任何问题或疑问都需要向项目所有者报告。

延伸阅读

下面还可以找到其他关于如何从 PySide2 转换为 PySide6 的第三方指南:

https://erwanleroy.com/updating-your-python-scripts-for-nuke-16-and-pyside6/

https://www.pythonguis.com/faq/pyside2-vs-pyside6/

    我们很遗憾听到

    请告诉我们