python py location

ここでは Houdini で Python (.py) ファイルを使う際のファイルの格納ディレクトリについて説明する。

使用ビルド: Houdini 15.5.632 (Windows 7)

1. デフォルトパス

Houdini を起動、Python Shell (Windows->Python Shell または Alt+Shift+P) を開き、

>>> import sys
>>> sys.path
とすると、Houdiniがデフォルトで Python ファイルを見に行くディレクトリのリストが表示される(下記は見易さのために改行を挿入)。
['C:/PROGRA~1/SIDEEF~1/HOUDIN~1.632/python27/lib/site-packages-ui-forced',
'C:/PROGRA~1/SIDEEF~1/HOUDIN~1.632/python27/lib/site-packages-forced',
'',
'C:\\PROGRA~1\\SIDEEF~1\\HOUDIN~1.632\\python27\\python27.zip',
'C:\\PROGRA~1\\SIDEEF~1\\HOUDIN~1.632\\python27\\DLLs',
'C:\\PROGRA~1\\SIDEEF~1\\HOUDIN~1.632\\python27\\lib',
'C:\\PROGRA~1\\SIDEEF~1\\HOUDIN~1.632\\python27\\lib\\plat-win',
'C:\\PROGRA~1\\SIDEEF~1\\HOUDIN~1.632\\python27\\lib\\lib-tk',
'C:\\Program Files\\Side Effects Software\\Houdini 15.5.632\\bin',
'C:\\PROGRA~1\\SIDEEF~1\\HOUDIN~1.632\\python27',
'C:\\PROGRA~1\\SIDEEF~1\\HOUDIN~1.632\\python27\\lib\\site-packages',
'C:/PROGRA~1/SIDEEF~1/HOUDIN~1.632/houdini/python2.7libs']
上を見てわかるのは、別途設定がない場合 Houdini の Python は、
  • $HFS 以下の Python 関連ディレクトリだけを見に行っている
  • ~/houdini15.5/scripts などはパスに入っていない
ということがわかる。よって、カスタムスクリプトを自動的に読み込ませるためには下記の方法のいずれかを取る必要がある。

2. パスの追加

Houdini の Python が自動的に見に行くディレクトリは以下の方法で追加することが出来る。

2.1 PYTHONPATH

Python の環境変数である PYTHONPATH が設定されている場合、Houdini の Python は自動的に認識する。例えば、(Windows で) C:\Python27\ 以下に Python 2.7 がインストールされていて、その下の C:\Python27\Lib\site-packages を参照する場合
  • システム環境変数として PYTHONPATH を追加、値をC:\Python27\Lib\site-packages とするか
  • $HOUDINI_USER_PREF_DIR/houdini.env
    PYTHONPATH = "C:/Python27/Lib/site-packages"
    とする。
Houdini は再起動が必要だが、再び Python Shell を開き、
>>> import sys
>>> sys.path
とすると、今度は、PYTHONPATHで設定したディレクトリが追加されていることがわかる。
['C:/PROGRA~1/SIDEEF~1/HOUDIN~1.632/python27/lib/site-packages-ui-forced' 
'C:/PROGRA~1/SIDEEF~1/HOUDIN~1.632/python27/lib/site-packages-forced' 
'' 
'C:\\Python27\\Lib\\site-packages' 
'C:\\PROGRA~1\\SIDEEF~1\\HOUDIN~1.632\\python27\\python27.zip' 
'C:\\PROGRA~1\\SIDEEF~1\\HOUDIN~1.632\\python27\\DLLs' 
'C:\\PROGRA~1\\SIDEEF~1\\HOUDIN~1.632\\python27\\lib' 
'C:\\PROGRA~1\\SIDEEF~1\\HOUDIN~1.632\\python27\\lib\\plat-win' 
'C:\\PROGRA~1\\SIDEEF~1\\HOUDIN~1.632\\python27\\lib\\lib-tk' 
'C:\\PROGRA~1\\SIDEEF~1\\HOUDIN~1.632\\bin' 
'C:\\PROGRA~1\\SIDEEF~1\\HOUDIN~1.632\\python27' 
'C:\\PROGRA~1\\SIDEEF~1\\HOUDIN~1.632\\python27\\lib\\site-packages' 
'C:/PROGRA~1/SIDEEF~1/HOUDIN~1.632/houdini/python2.7libs']

2.2 python2.7libs

HOUDINI_PATH で定義されているいずれかのディレクトリおよび HOME 以下に python2.7libs というディレクトリを作成すると、Houdini の Python は、それ以下を参照する。現実的なところとしては、

のいずれかとなる。(HSITE が C:\share\HoudiniFiles\ と定義されていて) 上記3つのディレクトリを作成、Houdini を再起動したのち、
>>> import sys
>>> sys.path
とすると、
['C:/PROGRA~1/SIDEEF~1/HOUDIN~1.632/python27/lib/site-packages-ui-forced',
'C:/PROGRA~1/SIDEEF~1/HOUDIN~1.632/python27/lib/site-packages-forced',
'',
'C:\\Python27\\Lib\\site-packages',
'C:\\PROGRA~1\\SIDEEF~1\\HOUDIN~1.632\\python27\\python27.zip',
'C:\\PROGRA~1\\SIDEEF~1\\HOUDIN~1.632\\python27\\DLLs',
'C:\\PROGRA~1\\SIDEEF~1\\HOUDIN~1.632\\python27\\lib',
'C:\\PROGRA~1\\SIDEEF~1\\HOUDIN~1.632\\python27\\lib\\plat-win',
'C:\\PROGRA~1\\SIDEEF~1\\HOUDIN~1.632\\python27\\lib\\lib-tk',
'C:\\PROGRA~1\\SIDEEF~1\\HOUDIN~1.632\\bin',
'C:\\PROGRA~1\\SIDEEF~1\\HOUDIN~1.632\\python27',
'C:\\PROGRA~1\\SIDEEF~1\\HOUDIN~1.632\\python27\\lib\\site-packages',
'C:/Users/ktaki/python2.7libs',
'C:/Users/ktaki/houdini15.5/python2.7libs',
'C:/share/HoudiniFiles/houdini15.5/python2.7libs',
'C:/PROGRA~1/SIDEEF~1/HOUDIN~1.632/houdini/python2.7libs']
となる。よって、これらのディレクトリに .py を置けば認識される。

2.3 コマンドで追加

コマンド経由で参照ディレクトリを追加することも可能。例えば、2.2 を見ると、 C:/share/HoudiniFiles/houdini15.5/python2.7libs (つまりは $HSITE/houdini15.5/python2.7libs) は存在するが、$HSITE/python2.7libs は存在しない。これを追加したい場合、Python Shell を開き、

>>> import sys os
>>> sys.path.append("%s/python2.7libs" % os.environ["HSITE"])
として
>>> sys.path
とすると、
['C:/PROGRA~1/SIDEEF~1/HOUDIN~1.632/python27/lib/site-packages-ui-forced',
'C:/PROGRA~1/SIDEEF~1/HOUDIN~1.632/python27/lib/site-packages-forced',
'',
'C:\\Python27\\Lib\\site-packages',
'C:\\PROGRA~1\\SIDEEF~1\\HOUDIN~1.632\\python27\\python27.zip',
'C:\\PROGRA~1\\SIDEEF~1\\HOUDIN~1.632\\python27\\DLLs',
'C:\\PROGRA~1\\SIDEEF~1\\HOUDIN~1.632\\python27\\lib',
'C:\\PROGRA~1\\SIDEEF~1\\HOUDIN~1.632\\python27\\lib\\plat-win',
'C:\\PROGRA~1\\SIDEEF~1\\HOUDIN~1.632\\python27\\lib\\lib-tk',
'C:\\PROGRA~1\\SIDEEF~1\\HOUDIN~1.632\\bin',
'C:\\PROGRA~1\\SIDEEF~1\\HOUDIN~1.632\\python27',
'C:\\PROGRA~1\\SIDEEF~1\\HOUDIN~1.632\\python27\\lib\\site-packages',
'C:/Users/ktaki/python2.7libs',
'C:/Users/ktaki/houdini15.5/python2.7libs',
'C:/share/HoudiniFiles/houdini15.5/python2.7libs',
'C:/PROGRA~1/SIDEEF~1/HOUDIN~1.632/houdini/python2.7libs',
'C:/share/HoudiniFiles/python2.7libs']
と一番最後に append (追加) されたことがわかる。

2.4 pythonrc.py

2.2 までで設定したディレクトリのいずれにかに pythonrc.py というファイルを作成、その中で 2.3 で説明したコマンドを記述しておけば、毎回 Python Shell を開いてコマンドを実行しなくともディレクトリの追加が可能になる。例えば $HOME/houdini15.5/python2.7libs/pythonrc.py というファイルを作成、その中に

import sys os
sys.path.append("%s/python2.7libs" % os.environ["HSITE"])
とすれば、デフォルトにはない $HSITE/python2.7libs 以下が認識されるようになる。なお、pythonrc.py は、$HOUDINI_USER_PREF_DIR/scripts/python に配置することも可能。詳細はこちら

3. py ファイルの実行

ここでは、timerX.py というビューポートの再生時間を計測する Python スクリプトを作成、上記のディレクトリのいずれかに配置し、実行する方法を説明する。

3.1 timerX.py

timerX.py の中身は以下の通り。

import hou
import time
global player_time
def outputPlaybarEvent(event_type, frame):
    if hou.playbarEvent.Started == event_type:
        global player_time
        player_time = time.time()
    elif hou.playbarEvent.Stopped == event_type:
        print time.time() - player_time

def go():
    hou.playbar.addEventCallback(outputPlaybarEvent)
このコードには def で定義された二つの関数があり、一つ目の関数 outputPlaybarEvent が実際の演算内容を定義し、二つ目の関数 go が実行方法を定義している。詳細は別の機会に。

3.2 実行

  1. Houdini を起動し、例えば、sphere を作成して、PyroシェルフからFlames を追加、
  2. 最終フレームを 60なり、短めに設定する。
  3. メインUI 右下のアニメーションループ設定を Loop から Play Once に変更。
  4. Python Shell を開き、以下を一行ずつ実行
    >>> import timerX
    >>> timerX.go()
  5. メインウィンドウの再生ボタンを押す。
      Play Once (1度だけ再生)となっているので、最終フレームまで行けば再生が終了し、Python Shellにはかかった時間が表示される。

3.3 スクリプト変更

毎回 Loop Once と自分で変更するのは面倒なので、このスクリプト実行時に、自動的に設定するようにしたい。その場合、

  1. Houdiniは終了せずにテキストエディタで timerX.py を編集。
    def go(): 以下を次の2行にして上書き保存。
    def go():
        hou.playbar.setPlayMode(hou.playMode.Once)
        hou.playbar.addEventCallback(outputPlaybarEvent)
  2. 変更を確認するためにアニメーションループ設定を Loop に戻す。
  3. Python Shell で reload(timerX)とすれば、スクリプトをもう一度読み込み変更が反映される。
    >>> reload(timerX)
    <module 'timerX' from 'C:/share/HoudiniFiles/python2.7libs\timerX.pyc'>
  4. 再び
    >>> timerX.go()
    としてから、再生ボタンを押せば、再生モードが自動的に Play Once に変更されたことがわかる。

関連項目

スクリプト協力: 鈴木英樹様

0 件のコメント:

コメントを投稿