症状
Nuke 11.0v1 以降で Python スクリプトを起動するときに、スクリプトに Python の PySide モジュールが必要な場合、 Nuke例外をスローしてスクリプトを開くことができなくなります。
以下に示すように、PySide モジュールがNukeの
init.py
ファイルにインポートされている場合、 Nukeの起動時に次の例外が発生します。 Nukeの起動ターミナル内では、 Nuke PySide モジュール (この場合は
PySide.QtCore
をインポートできなかったことを示すImportError
が表示されます。 原因
PySide の場合、 Nukeコア ライブラリ内で PySide 1.2.2 から PySide 2.0 に更新されたため、PySide ではなく Pyside2 としてインポートできるようになりました。現在Nukeに同梱されているライブラリのバージョンの詳細については、ドキュメントの「サードパーティのライブラリとフォント」セクションを参照してください。
Nuke 11.0v1 以降、PySide から PySide2 へのこの更新の結果、PySide モジュールは呼び出せなくなりました。
例えば:
import PySide.some_module
は次のように置き換えられました。
import PySide2.some_module
さらに、一部のクラスの定義がモジュール間で移動されました。これは特に GUI 関連のクラスに影響を与えます。これらのクラスは主に
PySide.QtGui
からPySide2.QtWidgets
に移動されましたが、同様に再配置された他のモジュールもあります。解決
Nukeの起動時に
ImportError
例外を解決するには、PySide を使用する '.nuke' フォルダー内のスクリプトを、実行前に例外をキャッチするように変更する必要があります。例外の処理は、インポート ステートメントを変更して
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
これにより、QtGui 関数のほとんどが QtWidgets モジュールに移動されたため、古い PySide コードを PySide2 で実行できるようになります。注: これは多くの 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 ドキュメント - 例外の処理
私たちはそれを聞いて申し訳ございません
理由をお聞かせください