症状
Nuke 11.0v1 以降で Python スクリプトを起動するときに、スクリプトに Python の PySide モジュールが必要な場合は、 Nuke例外をスローし、スクリプトが開けなくなります。
以下に示すように、 Nukeの
init.pyファイルに PySide モジュールがインポートされている場合、 Nukeの起動時に次の例外が発生します。 Nukeの起動ターミナル内に、 Nuke PySide モジュール (この場合は
PySide.QtCore ) をインポートできなかったことを示すImportError表示されます。 原因
PySideの場合、 Nukeコアライブラリ内でPySide 1.2.2からPySide 2.0にアップデートされたため、PySideではなくPyside2としてインポートできるようになりました。現在Nukeに同梱されているライブラリのバージョンの詳細については、ドキュメントの「サードパーティ製ライブラリとフォント」セクションをご覧ください。
PySide から PySide2 へのこのアップデートの結果、 Nuke 11.0v1 以降では PySide モジュールは呼び出せなくなりました。
例えば:
import PySide.some_module
は次のように置き換えられました:
import PySide2.some_module
さらに、一部のクラスの定義がモジュール間で移動されました。これは特にGUI関連のクラスに影響し、そのほとんどは
PySide.QtGuiからPySide2.QtWidgetsに移動されましたが、他のモジュールも移動されています。解決
Nuke起動時に
ImportError例外を解決するには、実行前に例外をキャッチするように '.nuke' フォルダ内の PySide を使用するスクリプトを変更する必要があります。例外を処理するには、インポート ステートメントを変更して、
try関数とexcept関数を呼び出し、PySide モジュールをインポートするときにImportErrorキャッチします。例外がキャッチされた場合は、PySide2 の同等の関数をインポートするための呼び出しを追加することができ、これにより起動時に
ImportErrorエラーが発生するのを防ぐことができます。詳細情報
原因セクションで述べたように、GUI関連の関数の一部が他のモジュールに移動されました。GUI関連のタスクすべてに使用されていたPySideモジュール(
PySide.QtGui )は、主にPySide2.QtWidgetsモジュールに移動されました。このモジュールを使用する場合、ほとんどの場合、 Nuke内で
ImportError回避するには、スクリプト内の各Pyside.QtGui関数をリファクタリングする代わりに、 PySide2.QtWidgets QtGuiとしてインポートする必要があります。これは次のコード スニペットのように設定できます。
try:
from PySide import QtGui, QtCore
except ImportError:
from PySide2 import QtCore
from PySide2 import QtWidgets as QtGui
これにより、古いPySideコードをPySide2で実行できるようになります。QtGuiのほとんどの関数がQtWidgetsモジュールに移動されたためです。注意:これは多くのPySideモジュールで動作しますが、すべてのモジュールで動作するわけではありません。そのため、コードの他の部分を更新する必要がある可能性があります。
PySide モジュールを使用するスクリプトがNuke 11 およびNuke 12 で正しく動作することを確認するには、移行を完了し、すべての
PySide関数をPySide2バージョンとしてリファクタリングする必要があります。 Nuke 10.5 とNuke 11 または 12 の両方で PySide と PySide2 を使用するときにコードの互換性を確保したい場合は、 Qt.py プロジェクトで、 Nukeのバージョンに応じて PySide モジュールと PySide2 モジュールを切り替えるプロセスが提供されています。
注意: Qt.py プロジェクトはサードパーティによって作成されているため、問題や質問がある場合はサードパーティのプロジェクト所有者に報告する必要があります。
追加の読み物
例外処理についてさらに詳しく知りたい場合は、次のリンクから例外に関するPythonドキュメントを参照してください: Pythonドキュメント - 例外処理
Nuke 16 以降で PySide エラーを解決する方法の詳細については、次の記事を参照してください。
Q100715: Nuke 16+ で Python PySide の問題を解決する方法
私たちはそれを聞いて申し訳ございません
理由をお聞かせください