サポートチケットを作成する
フォローする

Q100398:Nuke 11へのPySideスクリプトの実装

 

症状

Nuke 11でPythonスクリプトを起動するとき、あなたのNukeスクリプトがPythonのPySideモジュールを必要とする場合、Nukeはそれを開くことを妨げる例外を投げます。

以下に示すように、PySideモジュールがNukeのmenu.pyファイルにインポートされていると、Nukeの起動時に次の例外が発生します。
 
PluginError.PNG
 
Nukeの起動端末内で、NukeがPySideモジュール、この場合はPySide.QtCoreインポートできなかったことを示すImportErrorが表示されます。
 
PluginError3.png
 

 

原因


Nuke 11のリリースに伴い、Nuke VFXリファレンスプラットフォーム2017に苦情を申し立てることを目的とした重要なライブラリの更新が行われました。
 
PySideの場合、これはNukeコアライブラリ内でPySide 1.2.2からPySide 2.0に更新されたので、PySideではなくPyside 2としてインポートできるようになりました。 Nuke 11に同梱されているライブラリバージョンの詳細については、オンラインヘルプの付録Dを参照してください
 
Nuke 11から始まるPySideからPySide2へのこの更新の結果として、PySideモジュールはもはや呼び出し不可能です。
 
例えば:
 
import PySide.some_module
 
は下記に置き換えられています:
 
import PySide2.some_module
 
さらに、いくつかのクラスの定義はモジュール間で移動しました。これは特にPySide.QtGuiから
PySide2.QtWidgets に移動されたGUI関連クラスに影響しますが、他のモジュールも移動しました。
 
 

解決


Nukeの起動時にImportError例外を解決するには、PySideを使用する '.nuke'フォルダ内のスクリプトを実行前に例外を捕捉するように変更する必要があります。
 
例外の処理は、 tryおよびexcept関数を呼び出し、PySideモジュールをインポートするときにImportErrorをキャッチするようにimport文を修正することによって実行できます。
 
例外が発生した場合は、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モジュールを使用しているスクリプトがNuke 11で正しく動作するようにするには、移行を完了する必要があり、すべてのPySide関数はPySidePySide2バージョンとしてリファクタリングする必要があります。
 
Nuke 10.5とNuke 11の両方でPySideとPySide 2を使用しているときにコードの互換性を得たい場合は、Qt.pyプロジェクトが Nukeのバージョンに応じてPySideとPySide 2のモジュールを切り替えるプロセスを提供します。
 
:Qt.pyプロジェクトは第三者によって作成されているため、問題や質問がある場合は第三者のプロジェクト所有者に報告する必要があります。
 
 

追加の読み物


例外処理の詳細について知りたい場合は、次のリンクから例外に関するPythonの資料にアクセスすることができます。Python Documentation - Exceptioningの処理
 
スクリプトでPySide2.QtWebEngine使用している場合、PySide2.QtWebEngine 、残念ながら、このモジュールは現在Nuke 11に実装されていないので動作しません。これに関するより多くの情報はここで見つけることができます:
 
 

この記事は役に立ちましたか?
/

We're sorry to hear that!

Please tell us why.
11人中11人がこの記事が役に立ったと言っています

コメント