LoginSignup
1
2

PyAlembicをWindows環境でビルドする

Last updated at Posted at 2023-01-21

Windows環境のPythonからAlembicファイル (.abc) を扱えるようにするため、PyAlembicをビルドしてみます。

(2023/01/22追記)
ビルドスクリプトを作りました
(2024/02/03追記)
PythonパッケージをGitHub Actionsで作るようにして、
Releasesにバイナリパッケージを置きました

Alembicとは

Alembic は複雑なCGアニメーションをベイクする等の用途で使われるC++ライブラリです。このライブラリで生成できる.abcファイルは多くの主要なDCCツールでサポートされており、手軽に扱えると何かと便利です。

PyAlembicはそのAlembicライブラリのPythonバインディングで、これを使うことでPythonから簡単に.abcファイルを読み書きできるようになります。Alembicのリポジトリ にソースが同梱されていますが、公式のビルド済みファイルがないため自力でビルドする必要があります。

PyPIにあるAlembic は同名の別ツールなので注意

必要なツールの用意

事前に下記のツールをインストールしておきます。
ツールのバージョンは今回使ったものを載せています。

  • Visual Studio 2022 (Community版)
  • CMake 3.25
  • Python 3.10
  • Git

CMakeはパスを通しておいたほうが楽です。

依存関係のビルド

Alembicの依存ライブラリは下記の2つです。

古い.abcファイルに対応する場合は HDF5 も必要なようですが今回は省きます。

それぞれ個別にビルドしていきます。

Boost.Python

Boost公式のダウンロードページ からWindows用のソースコード一式(例: boost_1_81_0.zip のようなファイル)を入手、展開し、下記のようにしてBoost.Pythonだけをビルドします。

cd boost_1_81_0
.\booststrap.bat
echo "using python : : C:/Python/Python310 ;" > user-config.jam
.\b2 --build-type=complete --with-python --user-config=user-config.jam

コマンド中のBoostのフォルダ名 (boost_1_81_0) やPythonのパス (C:/Python/Python310) は適宜置き換えて実行してください

ビルドしたファイルは boost_1_81_0/stage/lib フォルダに出力されます。

Imath

ソースコードをgitリポジトリから入手します。
CMakeでビルドするので build フォルダを作ってその中で作業します。

git clone https://github.com/AcademySoftwareFoundation/Imath
cd Imath
mkdir build
cd build

cmake コマンドを実行します。-DPYTHON=ON オプションでPythonモジュールのビルドを有効にしています。

cmake .. -DPython_EXECUTABLE="C:/Python/Python310/Python.exe" -DPython3_EXECUTABLE="C:/Python/Python310/Python.exe" -DPYTHON=ON -DBoost_ROOT="../../boost_1_81_0" -DCMAKE_INSTALL_PREFIX="../_installed"
cmake --build . --config Release
cmake --install .

ビルドしたファイルは Imath/_installed フォルダに出力されます。

出力されたファイルのうち、*.pyd ファイルをPythonから見えるところにコピーしておきます。

cp "Imath/_installed/lib/site-packages/*.pyd" "C:/Python/Python310/Lib/site-packages"

Alembicのビルド

ソースコードをgitリポジトリから入手します。
CMakeでビルドするので build フォルダを作ってその中で作業します。

git clone https://github.com/alembic/alembic
cd alembic
mkdir build
cd build

cmake コマンドを実行します。

cmake .. -DUSE_PYALEMBIC=ON -DImath_DIR="../Imath/_installed/lib/cmake/Imath" -DPython3_EXECUTABLE="C:/Python/Python310/Python.exe" -DBoost_ROOT="../../boost_1_81_0" -DCMAKE_INSTALL_PREFIX="../_installed" -DALEMBIC_PYTHON_INSTALL_DIR="../_installed/lib/site-packages"
cmake --build . --config Release
cmake --install .

ビルドしたファイルは alembic/_installed フォルダに出力されます。

出力されたファイルのうち、*.pyd ファイルをPythonから見えるところにコピーしておきます。

cp "alembic/_installed/lib/site-packages/*.pyd" "C:/Python/Python310/Lib/site-packages"

動作確認

Pythonインタプリタから alembic モジュールを読み込んでみます。おそらくエラーになります。

>>> import alembic
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ImportError: DLL load failed while importing alembic: 指定されたモジュールが見つかりません

alembic.pyd ファイルが依存しているDLLのうち、いずれかが見つからないためエラーになっているので、
下記のようにPythonのDLL探索パスにBoost、Imath、Alembicのフォルダを追加します。パスは適宜書き換えてください。

import os
os.add_dll_directory(r"D:\_alembic-build\boost\stage\lib")
os.add_dll_directory(r"D:\_alembic-build\Imath\_installed\bin")
os.add_dll_directory(r"D:\_alembic-build\alembic\_installed\lib")

Python <= 3.7の場合は上記コマンドの代わりに、環境変数 PATH へ上記の3つのパスを追加します

再度インポートしてみます。

>>> import alembic
>>> alembic
<module 'alembic' from 'C:\\Python\\Python310\\lib\\site-packages\\alembic.pyd'>

うまくいったようです。

.abcファイルを読み込んでみます。

>>> arch = alembic.Abc.IArchive(r"C:\abctest.abc")
>>> arch
<alembic.Abc.IArchive object at 0x0000026462464180>

PyAlembicの使い方

PyAlembicの使い方は公式のドキュメントとPyAlembicのテストコードが参考になります。
というかそれしか情報が見当たりません :cry:

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2