Python モジュールは、Softimage プラグインの再利用可能コードを記述する際に便利です。 Softimage プラグインのモジュールをインポートするには、まずモジュールのフォルダ パスを Python システム パス(sys.path)に追加して、Python にモジュールの検索場所を伝える必要があります。 Python がモジュール ファイルの検索場所を把握すると、モジュールをプラグインにインポートすることができます。
#--------- import sys sys.path.append( 'd:\MyModules' ) import moduleA --------
上の例では、d:¥MyModules に定義された moduleA をインポートします。 複数のパスを sys.path に追加することができますが、パスを追加する順序によって、Python がモジュールを検索する順序が決まることを忘れないでください。
特定のパスを sys.path に追加することが必ずしも一番便利な方法ではありません。 これは特に異なる場所にインストールする必要があるプラグインに当てはまります。 たとえば、モジュールがプラグイン ファイルとともにある場合、プラグイン パスを sys.path に追加する必要があります。 この場合、Softimage によってプラグイン ファイル フォルダ パスに設定される変数 __sipath__ を使用することができます。この変数は常にプラグイン ファイルのネームスペースに定義され、Softimage アプリケーション オブジェクト全体を調べることなくそのまま使用することができます。
#--------- import sys if __sipath__ not in sys.path: sys.path.append( __sipath__ ) import moduleA --------
上の例では、Python がプラグイン フォルダを検索し、moduleA をインポートします。 このコードでは、__sipath__ は sys.path にのみ追加されます(このチェックが必要なのは、Softimage セッションで 1 つのプラグインを複数回ロードできるためです)。__sipath__ は、プラグイン フォルダに関連する任意のフォルダ パスの指定にも使用することができます。
#--------- import sys import os myModules = __sipath__ + os.sep + 'MyModules' if myModules not in sys.path: sys.path.append( myModules ) import moduleA --------
Softimage sipyutils モジュールには、モジュール パスをより簡単に指定するのに役立つ機能が含まれています。さらに、ソース コード ファイルをモジュールとしてインポートするための機能も含まれており、プラグインの書き込み中にバージョニングを考慮しなければならない場合に便利です。sipyutils モジュール ファイルは、Softimage アプリケーション フォルダ<install_folder>¥Application¥bin¥sipyutils.py にあります。
次の例は、sipyutils に定義された機能の使用方法を示しています。
#--------- Example 1: # note: for the example, the plug-in's __sipath__ variable is set to d:¥Application¥Plugins # import the Softimage utility module import sipyutils #add some paths to python system path sipyutils.add_to_syspath( __sipath__ ) sipyutils.add_subfolder_to_syspath( __sipath__, 'mysubfolder' ) # import eggs from d:\Application\Plugins import eggs def XSILoadPlugin( in_reg ): in_reg.Author = "Softimage" in_reg.Name = "TestPlugin" in_reg.Major = 1 in_reg.Minor = 0 in_reg.RegisterCommand( "TestCommand", "TestCommand") return True def TestCommand_Execute( ): # INFO: d:\Application\Plugins\eggs.pyc LogMessage( 'eggs.__siplugin_file__ ' + eggs.__siplugin_file__ ) # import foo from d:\Application\Plugins\mysubfolder import foo LogMessage( 'foo.__siplugin_file__ ' + foo.__siplugin_file__ ) return True Example 2: import sipyutils sipyutils.add_to_syspath( __sipath__ ) # import foo.py from d:\Application\Plugins # INFO: d:\Application\Plugins\foo.pyc import foo LogMessage( foo.__siplugin_file__ ) # import foo.py from d:\Application\Plugins\mysubfolderA foo = sipyutils.import_source( __sipath__ + os.sep + 'mysubfolderA' + os.sep + 'foo.py' ) # INFO: d:\Application\Plugins\mysubfolderA\foo.pyc LogMessage( foo.__siplugin_file__ ) # import foo.py from d:\Application\Plugins\mysubfolderB foo = sipyutils.import_source( __sipath__ + os.sep + 'mysubfolderB' + os.sep + 'foo.py' ) # INFO: d:\Application\Plugins\mysubfolderB\foo.pyc LogMessage( foo.__siplugin_file__ ) ---------