夜風のMixedReality

xRと出会って変わった人生と出会った技術を書き残すためのGeekなHoloRangerの居場所

Blenderアドオン用に外部ライブラリをバンドルする

本日はBlender Python枠です。

BlenderではPythonを使用することでアドオンを作成し、機能を拡張することができます。

またアドオンは配布することも可能です。

 配付する際に問題となるのが、外部ライブラリを使用している場合です。

 ローカル環境ではpipコマンドを使用してBlenderPythonファイル自体に外部ライブラリをインストールすることでアドオン側で外部ライブラリを読み込み使用することができます。

 しかし、アドオンを配布し他者に使用してもらう場合を考えてみると、ユーザーは自身のBlenderPython環境に外部ライブラリを導入する必要があり、ライセンスやバージョンの問題など、非開発者にとっては複雑な問題となります。

 今回はこれを解消するためにアドオン側に外部ライブラリをバンドルし、ユーザー側で特段ライブラリをインストールせずにアドオンを使用できる方法を試して行きます。

〇環境

Windows PC

・Blender4.0

〇バンドルとは?

 バンドルとはまとめるという意味を持つ言葉です。

 ソフトウェア用語としては一緒に配布されるコンポーネントを指し、例えばUnityなどでアプリケーション本体と別にゲームデータをインストールする仕組みでアセットバンドルと呼ばれるものがあります。

今回の場合はPythonパッケージがほかのパッケージに依存しているという状態のため、バンドルして一緒に配布することでエンドユーザーが依存している他のパッケージをインストールしなくてよいようにすることができます。

〇ライセンス条項の確認

 まずは今回依存している外部ライブラリのライセンス条項を確認します。

 サードパーティーのアセットは必ず確認を行う必要があります。

 今回はMusic21を使用するためMusic21のライセンスを確認します。

 Music21の場合はOSSで開発されており、そのソースコードGitHub上に存在します。

github.com

 GitHuv記載のドキュメントサイト

web.mit.edu

によるとmusic21はBSDライセンスです。

BSDライセンスとは?

BSDライセンス(Berkeley Software Distribution License)は無保証の上で再配布が許可されています。

 しかし著作権表示とライセンス表示の要求がされます。

 この条件の上で商用利用も許可されています。

 つまりMusic21を使用するためにはライセンスの表示、著作権の表示が求められているということになります。

〇アドオンをバンドル化する

①Music21のリポジトリよりリリースページへアクセスします。

github.com

②リリースページよりソースコードのzipファイルをダウンロードします。

③ダウンロード後ソースコードを展開します。

④アドオンのプロジェクトのディレクトリに解凍したソースコードを配置します。

今回はThirdpartyという階層を用意してその中に配置しました。

⑤配付用のPythonのライブラリのパスを書き換えます。

従来はpython側に存在している前提で次のようなコードでした。

import bpy
from music21 import *

こちらを次のように書き換えます。

import sys
sys.path.append('thirdparty/music21-9.1.0')

import bpy
from music21 import *

冒頭部にパスを記述することでこちらが参照されるようになります。

ただし、music21での依存関係も導入しておく必要があります。

これはrequestsフォルダを作成しこの中にライブラリのソースコードを配置します。

アドオンのソースコードで冒頭部で読み込みます。

import requests

どのライブラリが依存関係にあるのかはソースコードに含まれるrequirements.txtを確認することで見ることができます。

以上でユーザーがそれぞれ外部ライブラリをインストールしなくてもアドオンを使用することができるようになりました。

本日は以上です。