Q100715: Nuke 16+ で Python PySide の問題を解決する方法

症状

Nuke 16 以降を起動するときに、PySide2 を使用するカスタム Python コードがある場合、プラグインが失敗するため起動時にエラーが発生します。

コマンドプロンプトまたはターミナルで起動している場合は、次のようなエラーも表示されます: ModuleNotFoundError: No module named 'PySide2' :


原因

Nuke 16のVFX Reference Platform 2024へのアップデートに伴い、PySideライブラリがPySide6にアップデートされました。これにより、PySideモジュールのインポート名が新しくなりました。

これは、 Nuke 11がVFX Reference Platform 2017のアップデートでPySideからPySide2に移行した時と似ています。詳細については、こちらの記事をご覧ください: Q100398: Nuke 11+でPySide Pythonスクリプトを使用する際の問題の解決方法

解決

これを解決するには、PySide6 で動作するようにコードを更新する必要があります。

多くの場合、次のように置き換えることができます。

import PySide2

と:

import PySide6

PySide から PySide2 へのアップグレードとは異なり、大きなモジュールの変更はないため、これによりほとんどの問題が解決されるはずです。

ユーザーに影響を与える可能性のある注目すべき変更点の 1 つは、 Nukeの UI 内のメニュー アクションに使用されるQActionクラスがPySide2.QtWidgetsからPySide6.QtGuiに移動されたことです。

影響を受けるモジュールや関数を使用している場合は、コード内で対処が必要となる可能性のあるその他の変更点もあります。詳細については、Qt for Pythons のウェブサイト(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.pyNukeのパスで利用可能であれば、 Nukeバージョンに合わせてコードを変更することなく、異なるバージョンのNuke間でモジュールをインポートできます。Qt.pyGitHub で入手できます: https://github.com/mottosso/Qt.py

注意: Qt.py プロジェクトはサードパーティによって作成されたため、問題や質問がある場合はプロジェクト所有者に報告する必要があります。

さらに詳しく

PySide2 から PySide6 に変換する方法に関するその他のサードパーティ ガイドも以下にあります。

https://erwanleroy.com/nuke-16 および pyside6 用の Python スクリプトの更新/

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

    私たちはそれを聞いて申し訳ございません

    理由をお聞かせください