本日はBlender枠です。
今回は配布したアドオンで必要となる外部依存ライブラリをバッチファイルを使用してインストールするために、その前段階としてBlenderのインストールパスをバッチファイルに書き込む処理を行います。
ライブラリによってはBlenderにデフォルトでインストールされていないものもあり、この場合自動的に導入されるのではなくユーザー自身にトリガーを引き実行してもらう必要があります。
これはライセンスの問題やユーザーのPC環境へ変更を加える可能性があるために必要なプロセスです。
〇Blenderにライブラリをインストールする際のパス
Blenderにライブラリをインストールする場合のパスは次のように調べることができます。
import bpy import os # Blenderの実行ファイルパスを取得 blender_exec_path = bpy.app.binary_path # Blenderのインストールディレクトリを取得 blender_install_dir = os.path.dirname(blender_exec_path) print("Blenderのインストールディレクトリ: ", blender_install_dir)
なおBlender公式でblenderを導入した場合とBlenderLauncherを使用した場合ではパスが変わる可能性があり、この方法で調べること環境ごとの差を考慮することができます。
実際に筆者の場合はBl;enderLauncherを使用してBlender環境を構築しているため次のように特殊なパスが返されます。
Blenderのインストールディレクトリ: C:\Blender\stable\blender-3.4.0+stable.a95bf1ac01be
〇Blenderで外部のバッチファイルにパスを渡し処理を実行する
次にBlenderから外部のバッチファイルにパスを渡しバッチファイルの処理を実行することを行います。
これは①バッチファイルのパスを書き換える②バッチファイルを実行する という手順で実装できそうです。
実装自体は過去に行っています。
処理内容としてはバッチファイルのテキストを書き換えていることになります。
バッチファイルの初期府内容は次のようになります。
@echo off set PYTHON_PATH=<blender_python_path.txt> start explorer %PYTHON_PATH%
この中のblender_python_path.txtがBlenderによって書き換えられるためこの処理は実施手的に不可逆的な処理と言えます。
ここまでの2つを組み合わせると次のようになります。
import bpy import os import re # Blenderの実行ファイルパスを取得 blender_exec_path = bpy.app.binary_path # Blenderのインストールディレクトリを取得 blender_install_dir = os.path.dirname(blender_exec_path) #batファイルパスを定義(この例ではDドライブ直下に配置) file_path = os.path.join(os.path.expanduser("~"), 'D:', 'test.bat') with open(file_path, 'r') as f: content = f.read() print("読み込んだテキスト: ", content)#Debug # <>で囲まれた部分を見つける pattern = r'<(.*?)>' matches = re.findall(pattern, content) # 見つけた部分を書き換える new_content = content for match in matches: new_content = new_content.replace('<' + match + '>', blender_install_dir) # Blenderのインストールパスをファイルに書き込みます with open(file_path, 'w') as f: f.write(new_content) print("書き込んだテキスト: ", new_content)
〇バッチファイルを実行する
最後に書き換えたバッチファイルを実行します。
import bpy import os import re import subprocess # Blenderの実行ファイルパスを取得 blender_exec_path = bpy.app.binary_path # Blenderのインストールディレクトリを取得 blender_install_dir = os.path.dirname(blender_exec_path) #batファイルパスを定義(この例ではDドライブ直下に配置) file_path = os.path.join(os.path.expanduser("~"), 'D:', 'test.bat') with open(file_path, 'r') as f: content = f.read() print("読み込んだテキスト: ", content)#Debug # <>で囲まれた部分を見つける pattern = r'<(.*?)>' matches = re.findall(pattern, content) # 見つけた部分を書き換える new_content = content for match in matches: new_content = new_content.replace('<' + match + '>', blender_install_dir) # Blenderのインストールパスをファイルに書き込みます with open(file_path, 'w') as f: f.write(new_content) print("書き込んだテキスト: ", new_content) # subprocessを使用して.batファイルを実行します。 subprocess.call(file_path)
これを実行すると次のようにBlenderのパスを開くことができました。
本日は以上です。