FBX Python SDK をビルドしてコード補完を実現するまで

2024/12/05に公開

ビルド要件

以下のものが利用可能であること。

  • FBX SDK
  • C++ コンパイラ
  • Python インタープリタ ( 3.10.x[1] )



また、筆者環境は以下の通り。

  • Windows11
  • FBX SDK 3.7
  • Visual Studio 2022 17.12.2
  • Python 3.10.16


FBX Python Bindings の導入

Autodesk公式の配布場所 より、FBX Python Bindings インストーラをダウンロード。

FBX Python SDK とは別物なので注意


ダウンロードしたインストーラを起動する。「I accept」を選択。

インストールパスはデフォルトのままでよい。

ぜひ README には目を通そう。「Yes」を選択

これでインストールは完了。
インストーラの画面は閉じてよい。


FBX Python SDK をダウンロードしなかった理由

実際はダウンロードしていたが、筆者環境には対応していなかった。


ダウンロードされた FBX Python SDK

本来以下のようにしてインストールできるはずだが、エラーが出てしまった。

python -m pip install fbx-2020.3.7-cp310-none-win_amd64.whl


ビルド準備

README.md に書いてあるが、改めて手順をまとめる。

  1. FBX SDK のインストール
    FBX Python をビルドするには、FBX Python Bindings だけでなく、FBX SDKも必要。
    同ページから同様の手順でインストールする。


  1. 環境変数の設定
    Windows の場合、以下2つの環境変数を設定する。

    環境変数
    FBXSDK_ROOT C:\Program Files\Autodesk\FBX\FBX SDK\2020.3.7
    FBXSDK_COMPILER vs2022


  1. SIP のインストール

    python -m pip install --force-reinstall -v "sip==6.6.2"
    

    ターミナルにて sip-build --help を実行し、ヘルプが表示されることを確認しておく。


FBX Python のビルド

pythonのバージョン指定(任意)

複数のバージョンのPythonをインストールしている場合、ビルドに用いるバージョンを指定するには pyproject.tomlrequires 部分を以下のように編集する。

[build-system]
requires = ["python=3.10.16", "sip >=6.6.2, <6.7"] # Sip version 6.7.0 and higher are broken for handling template FbxArray


stubファイルを生成するよう設定

stubファイルとは、pythonのモジュールについて型情報を提供するもの[2]。拡張子は .pyi。このファイルを VScode の Settings.json 内で設定すると、エディターにてコード補完が効くようになる。

SIPでは、ビルドするモジュールについて、stubファイルを作成するよう設定できる。具体的には、ビルドコマンド sip-build にオプション --pep484-pyi を指定することで、ビルド時に pyi ファイルを生成するよう設定できる。


SIPドキュメントより


ただし、このオプションを設定するだけでは不十分。
pyproject.toml ファイルにて、dunder-init オプションを設定する必要がある。

dunder-init
The boolean value specifies if a init.py file should be installed in the top level package directory. By default it is not installed and the value is ignored for standalone projects. If it is set and at least one set of bindings specify that a Python type hints stub file be generated (by setting the pep484-pyi option) then the stub file for the sip module and a PEP 561-compatible py.typed marker file is also installed. -- pyproject.toml Reference

したがって、Python Bindings のインストール先にある pyproject.toml の該当箇所を、以下のように編集する。

[tool.sip.project]
dunder-init = true
sip-files-dir = "sip"
minimum-macos-version = ""

デフォルトでは管理者権限が必要なので注意。


Python SDK のビルド

ターミナルにて Python Bindings のインストール先に移動し、ビルドコマンドを実行する。
これもまた、実行には管理者権限が必要。

cd "C:\Program Files\Autodesk\FBX\FBX Python Bindings\2020.3.7"
sip-build --verbose --pep484-pyi

「コード生成が終了しました」「The project has been built.」と表示されたらビルドは完了。この時点で build/fbx ディレクトリに fbx.pyi が生成されている。

最後に、以下のコマンドで Python SDK のモジュールをインストールさせる。

sip-install

「コード生成が終了しました」「The project has been installed.」と表示されたらインストール完了。FBX Python Bindings のディレクトリにて、build\fbx\build\lib.win-amd64-cpython-310 ディレクトリに fbx.cp311-win_amd64.pyd モジュールが生成されていることを確認する。
このモジュールは Python の site-packages ディレクトリにコピーすればよい。


VScode でコード補完を実現する

まず、VScode の設定ファイル( Settings.json )を開く。
"python.analysis.extraPaths" の項目に、stub ファイル( fbx.pyi )のパスを記入する。

"python.analysis.extraPaths": [
    "C:\\Program Files\\Autodesk\\FBX\\FBX Python Bindings\\2020.3.7\\build\\fbx"
]

これで VScode エディターにて FBX Python SDK のコード補完が効くようになる。


カーソルを合わせると情報が表示される


補足

簡単なサンプルを示す。
空の fbx scene を出力するスクリプト。

test.py
from fbx import*

# Configure New Scene
lSdkManager = FbxManager.Create()
ios = FbxIOSettings.Create(lSdkManager, "Export") # IOSN_EXPORT
lSdkManager.SetIOSettings(ios)
lScene = FbxScene.Create(lSdkManager, "New Scene")

# Prepare for export
fbxoutputpath = "C:/fbx_python_test/test.fbx"
lExporter = FbxExporter.Create(lSdkManager, "")
lExporter.Initialize(fbxoutputpath, -1, ios)

# Export the Scene
if lExporter.Export(lScene):
    print("The test fbx file successfully exported.")
else:
    print("Failed to export the test fbx file...")

# Cleanup
lExporter.Destroy()
lSdkManager.Destroy()

python test.py で実行する。


fbx ファイルが生成された


確かに空の Scene であった


脚注
  1. Autodesk FBX SDK - Platforms supported ↩︎

  2. https://typing.readthedocs.io/en/latest/guides/writing_stubs.html ↩︎

Discussion