Working with Custom Python Modules in Softimage

 
 
 

Python modules are convenient for writing reusable code for Softimage plug-ins. To import a module in a Softimage plug-in, you first need to tell Python where to find the module by adding the module folder path to the Python system path (sys.path). Once Python knows where to find your module file, you can import it into your plug-in.

#---------

import sys

sys.path.append( 'd:\MyModules' )

import moduleA

--------

The example above imports moduleA defined in d:\MyModules. You can add more than one path to sys.path, but keep in mind that the order in which the paths are added determines the search order that Python uses to look for your modules.

Adding specific paths to sys.path is not always the most convenient method. This is particularly true for plug-ins that need to be installed to different locations. For instance, when your modules are located with your plug-in file, the plug-in path must be added to sys.path. In this case, you can use the variable __sipath__ which gets set by Softimage to the plug-in file folder path. This variable is always defined in the plug-in file namespace and can be used as is without going through the Softimage Application object.

#---------

import sys

if __sipath__ not in sys.path:

	sys.path.append( __sipath__ )

import moduleA

--------

In the example above, Python will search the plug-in folder and import moduleA. The code also ensures that __sipath__ gets added to sys.path only (this check is required because a plug-in can be loaded multiple times during a Softimage session). __sipath__ can also be used to specify any folder paths related to your plug-in folder.

#---------

import sys

import os

myModules = __sipath__ + os.sep + 'MyModules'

if myModules not in sys.path:

	sys.path.append( myModules )

import moduleA

--------

The Softimage sipyutils module contains functions to help you specify your module paths more easily. It also contains functions for importing source code files as modules, which can be handy if versioning has to be considered when writing plug-ins. The sipyutils module file is located in the Softimage application folder: <install_folder>\Application\bin\sipyutils.py.

The following example demonstrates how to use the functions defined in 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__ )

---------

Creative Commons License Except where otherwise noted, this work is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 3.0 Unported License