Houdini を Python 3 でやる!!!

# はじめに

今年2回目のアドカレ記事。一つ目は、[『SideFX Labs Toolの新規のインストール方法、Package機能に関して検証してみる』](https://qiita.com/takavfx/items/d1698b89df6fb1b86f9c)といったものでした。
なので、今度は別角度のものをば。

Pythonネタです。

諸事情で、僕の業務のベースはすでにPython3系に移行していて、Python3系を常用している。スタンドアロンのツールを作る時も3系。
M○y○などの関係で、Python処理を書かなければならないときも、ベースはPython3でパイプランを書いて、M○y○の処理をPython2で回す処理を別プロセスで回したりする。
むしろ、「ほかのさまざまな自動処理は3系で書くのが前提なのに、DCCツールのためにPython2を使わなければならない」という制限されることによる心理状況や、その対応をちまちまやることの不毛さによるストレスを抱いてしまうくらい。

[VFX Reference Platform](https://vfxplatform.com)の記事を追っていくと、以前は、2019年の時点でPython3に移行することが示唆されていた。ただ、やはり、対応が難しかったようで、今では2020年になっている。(といいつつも、M○y○ 2020でPython3バージョンはまだ出てないようだが…？:thinking:)
もう年はずらさないという意気込みの噂は聞こえてきていて、「本当か？」という疑問は持ちつつも、今回の「 **Houdini 18にて、Python 3のプレビュー版が配布され始めた:bangbang:** 」というのには、一つの歴史を区切るイベントがいよいよ起こり始めたなと感じる。

まぁ、そういうことで、待ちに待ったPython 3対応のプレビュー版がオープンになったので、バグがおおいらしいというのはともかく、体当たりしてみようじゃないかというわけ。

ちなみに、Python3での処理自体は、17.5のPDGの時点で可能になっていて、フローの中にPython3の処理を挟む方法に関しては、[**すでにこちらで方法を記載している**](https://qiita.com/takavfx/items/faa892379291958b9902)ので参照されたし！

:warning:
**ちなみにちなみに、断っておくが、このバージョンはあくまでプレビュー版で、バグに体当たりしにいくというドMプレイをしているだけなので、マネをする際には覚悟して飛び込んでネ** :wink:
:warning:


さぁ、いってみよう:bangbang:

## プレビュー環境

> Houdini 18.0.310
> Windows 10


# インストール

まずはインストーラーをダウンロードしに行きます。

まずは、 Get > ダウンロード に行って、
![vivaldi_bYcUKlO5eL.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/51857/74ec9214-6578-e108-4c03-b89a23f98950.png)

Production Build か Daily Buildのダウンロード項目で、それらのページに行きます。どっちでもいいです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/51857/24747a1c-2519-35a5-71af-4a9577541a29.png)

デフォルトでは、指定のフィルターがかかってみているので、フィルターメニューのHoudini Python 3でフィルターを切り替えます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/51857/bf348f90-4de9-1976-18a7-e43aec6f155a.png)

そしてダウンロード:bangbang:

そしてインストール:bangbang::bangbang:
おらぁ:bangbang::bangbang::bangbang::bangbang:
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/51857/c506c9a5-c7d6-0322-0911-b674119812b8.png)


# 試してみる

とまぁ、ダウンロードとインストールだけで終わるしょーもない記事でもよかったけれども、実際の挙動が気になるので、もうちょっと試してみる。

## 起動

起動開始後、コンソール表示に出てくるエラーに早速不穏な空気を感じつつ、起動が完了した。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/51857/4fcbeebc-84e4-ba47-b075-fdeb98664163.png)

どうやらここら辺はまだPython 3対応してないっぽい。

## Python Shell

とりあえず、Python Shellを立ち上げてみる。
現状の3.7系の最新版である、Python 3.7.4が採用されている。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/51857/ac3a5c50-271a-441a-0c3f-afb7afa0285e.png)

## Window Title

WindowタイトルにもPython 3が記述されており、今どのバリアントを使っているかが認識できる。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/51857/25809567-06d8-5b10-c316-95bf4fbe6d03.png)


## ノードエディットのイベントが対応されていないバグ一個目

どうやら、Houdiniのノード名を書き換えたときのイベントもPythonを使っているのか、ノード名の変更でさえも許可してもらえない。Unicodeエラーを起こしている。

ノードの名前も変えさせてくれないのか…アツいぜっ:exclamation::muscle::muscle::muscle:

![houdini_pcUl0wQ9mF.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/51857/ba94e2cc-431b-9ac1-1529-5d97fe5ce571.png)

## Python 3系にバッテリーインクルードされているモジュールが通るかのテスト

Pathlibで試してみる。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/51857/de9bc99e-fb9f-9680-c7f1-67cb183485a7.png)

とおった！
個人的には、これが使えるだけで、評価の価値がある:angel:


## Houdini Python 3 with TensorFlow on Windows

Windows版のTensorFlowは、はたからPython 2に対応するつもりもなく開発されてたので、サポート外をゆくか、もしくはLinuxをあえて使うといった選択肢だった。
しかしながら、Python 3にHoudiniが対応したとなれば、もうそんなのも関係なくなるので、堂々とサポート下でTensorFlowを使える:bangbang:
ということで、いけるか試してみた。

とりあえず結果だけ。

**んん、いけない(。´・ω・)**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/51857/eb7e5ede-1f41-b05d-903c-c3e7899b54a5.png)

ちなみに、2回目たたくと別のimportエラーが出る

```
>>> import tensorflow as tf
Traceback (most recent call last):
  File "<console>", line 1, in <module>
  File "D:\Develop\Houdini\Qiita\tf2\python3.7.4\site-packages\tensorflow\__init__.py", line 98, in <module>
    from tensorflow_core import *
  File "D:\Develop\Houdini\Qiita\tf2\python3.7.4\site-packages\tensorflow_core\__init__.py", line 45, in <module>
    from . _api.v2 import compat
  File "D:\Develop\Houdini\Qiita\tf2\python3.7.4\site-packages\tensorflow_core\_api\v2\compat\__init__.py", line 23, in <module>
    from . import v1
  File "D:\Develop\Houdini\Qiita\tf2\python3.7.4\site-packages\tensorflow_core\_api\v2\compat\v1\__init__.py", line 40, in <module>
    from . import experimental
  File "D:\Develop\Houdini\Qiita\tf2\python3.7.4\site-packages\tensorflow_core\_api\v2\compat\v1\experimental\__init__.py", line 11, in <module>
    from tensorflow.python.ops.control_flow_v2_toggles import output_all_intermediates
  File "D:\Develop\Houdini\Qiita\tf2\python3.7.4\site-packages\tensorflow_core\python\ops\control_flow_v2_toggles.py", line 24, in <module>
    from tensorflow.python.ops import control_flow_util_v2
  File "D:\Develop\Houdini\Qiita\tf2\python3.7.4\site-packages\tensorflow_core\python\ops\control_flow_util_v2.py", line 28, in <module>
    from tensorflow.python.keras.engine import base_layer_utils
  File "D:\Develop\Houdini\Qiita\tf2\python3.7.4\site-packages\tensorflow_core\python\keras\__init__.py", line 27, in <module>
    from tensorflow.python.keras import applications
  File "D:\Develop\Houdini\Qiita\tf2\python3.7.4\site-packages\tensorflow_core\python\keras\applications\__init__.py", line 25, in <module>
    from tensorflow.python.keras import engine
  File "D:\Develop\Houdini\Qiita\tf2\python3.7.4\site-packages\tensorflow_core\python\keras\engine\__init__.py", line 23, in <module>
    from tensorflow.python.keras.engine.base_layer import Layer
  File "D:\Develop\Houdini\Qiita\tf2\python3.7.4\site-packages\tensorflow_core\python\keras\engine\base_layer.py", line 56, in <module>
    from tensorflow.python.keras.saving.saved_model import layer_serialization
  File "D:\Develop\Houdini\Qiita\tf2\python3.7.4\site-packages\tensorflow_core\python\keras\saving\__init__.py", line 20, in <module>
    from tensorflow.python.keras.saving.hdf5_format import load_attributes_from_hdf5_group
  File "D:\Develop\Houdini\Qiita\tf2\python3.7.4\site-packages\tensorflow_core\python\keras\saving\hdf5_format.py", line 32, in <module>
    from tensorflow.python.keras.utils import conv_utils
  File "D:\Develop\Houdini\Qiita\tf2\python3.7.4\site-packages\tensorflow_core\python\keras\utils\__init__.py", line 38, in <module>
    from tensorflow.python.keras.utils.multi_gpu_utils import multi_gpu_model
  File "D:\Develop\Houdini\Qiita\tf2\python3.7.4\site-packages\tensorflow_core\python\keras\utils\multi_gpu_utils.py", line 22, in <module>
    from tensorflow.python.keras.engine.training import Model
  File "D:\Develop\Houdini\Qiita\tf2\python3.7.4\site-packages\tensorflow_core\python\keras\engine\training.py", line 42, in <module>
    from tensorflow.python.keras import metrics as metrics_module
  File "D:\Develop\Houdini\Qiita\tf2\python3.7.4\site-packages\tensorflow_core\python\keras\metrics.py", line 34, in <module>
    from tensorflow.python.keras.engine.base_layer import Layer
ImportError: cannot import name 'Layer' from 'tensorflow.python.keras.engine.base_layer' (D:\Develop\Houdini\Qiita\tf2\python3.7.4\site-packages\tensorflow_core\python\keras\engine\base_layer.py)
```

### 検証方法A

とりあえず、pip install時に切り出してテストするやり方。

1. Anacondaで、Python3.7.4環境を作って、その環境に入る。
2. コマンドラインで、`pip install -t <検証用パス> tensorflow=2.0.0`でインストールする。
3. コマンドラインで、`set PYTHONPATH=<検証用パス>` でセットする。
4. 一応、コマンドライン上でちゃんと動くかテストしておく。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/51857/30e0e03d-db43-223d-3cd1-2393c63bd77b.png)
5. コマンドラインで、 `call "C:\Program Files\Side Effects Software\Houdini 18.0.310\bin\happrentice.exe"` でHoudiniを実行する or houdini.env に書き込む。
6. `import tensorflow as tf;tf.__version__` とか実行してみる。

#### 結果

上記エラー

### 検証方法B

素直にAnacondaのconda installに任せてみるやり方。

1. Anacondaで、Python3.7.4環境を作って、その環境に入る。
2. コマンドラインで、`conda install tensorflow=2.0.0`でインストールする。
3. 一応、コマンドライン上でちゃんと動くかテストしておく。
4. コマンドラインで、 `call "C:\Program Files\Side Effects Software\Houdini 18.0.310\bin\happrentice.exe"` でHoudiniを実行する or houdini.env に書き込む。
5. `import tensorflow as tf;tf.__version__` とか実行してみる。

#### 結果

同じく上記エラー

### 検証方法C

そもそも、Houdiniインストール時についてくるPythonは大丈夫なのかテストするやり方。

1. 検証方法Aのステップ3までやっておく。
2. コマンドラインで、"C:\Program Files\Side Effects Software\Houdini 18.0.310\python37\python.exe" で、Houdiniのインストール時についてくるPythonを起動してみる。
3. `import tensorflow as tf;tf.__version__` とか実行してみる。 -> こいつはちゃんと動いてる

### 検証方法D

そもそも、新しいDaily Buildを試してみる。

> 検証環境
> Houdini 18.0.315


1. 新しいビルドをダウンロードしてきていんすこ。
2. 検証Aの手順でテスト。

#### 結果

同じだった…(。´・ω・)

うーん…(。´・ω・)
どうやら、Houdini Python3についてくる別のモジュールあたりが悪さしてる可能性。houモジュール自体が、まだPython3に対応してない感じかな。
これ以上は追う気力が失せてしまった……。
まぁ、またしばらくしたら試してみようと思う。好奇心の灯は再び:volcano:

# まとめ

………、と、とりあえずPython3が動く(嘘は言っていない)のは確認できた。
しかしながら、なかなかにまだまだ茨の道なのか、開発の方々も大変苦労しておられる様子…。もうしばらく見守りつつ、さらなる検証をしていくという事の方がいいかもしれない。