夜風のMixedReality

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

Blenderでバッチファイルを実行してBlenderのインストールパスをエクスプローラーで開く

本日は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から外部のバッチファイルにパスを渡しバッチファイルの処理を実行することを行います。

これは①バッチファイルのパスを書き換える②バッチファイルを実行する という手順で実装できそうです。

redhologerbera.hatenablog.com

実装自体は過去に行っています。

処理内容としてはバッチファイルのテキストを書き換えていることになります。

バッチファイルの初期府内容は次のようになります。

@echo off
set PYTHON_PATH=<blender_python_path.txt>
start explorer %PYTHON_PATH%

この中のblender_python_path.txtBlenderによって書き換えられるためこの処理は実施手的に不可逆的な処理と言えます。

ここまでの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)

〇バッチファイルを実行する

最後に書き換えたバッチファイルを実行します。

redhologerbera.hatenablog.com

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のパスを開くことができました。

本日は以上です。