夜風のMixedReality

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

Blenderでバッチファイルを使用して外部Pythonライブラリを導入する

本日はBlenderPython枠です。

redhologerbera.hatenablog.com

BlenderPythonパスの指定

前回はBlenderがインストールされているパスを取得することはできましたが、実際はBlenderPythonに対してライブラリをインストールする必要があります。

そこで前回の方法と、Blenderのバージョンを取得する方法を組み合わせてBlenderPythonパスを取得します。

redhologerbera.hatenablog.com

redhologerbera.hatenablog.com

次のコードでパスを取得できます。

# Blenderの実行ファイルパスを取得
blender_exec_path = bpy.app.binary_path
blender_version = bpy.app.version
major_version = str(blender_version[0])  # 整数を文字列に変換
minor_version = str(blender_version[1])  # 整数を文字列に変換

python_path = blender_exec_path + '\\' + major_version + '.' + minor_version + '\\python'

〇ライブラリが存在しない場合バッチファイルを実行する処理

ライブラリがBlenderにインストールされていない場合バッチファイルにPythonのパスを書き込み実行するコマンドは以下になります。

import bpy
import os
import re 
import subprocess



def check_library():
    # Blenderに組み込まれたMessagePackライブラリを使用してみる
    try:
        import msgpack
        return True
    except ImportError:
        return False   
    
    
# Blenderの実行ファイルパスを取得
blender_exec_path = bpy.app.binary_path
blender_version = bpy.app.version
major_version = str(blender_version[0])  # 整数を文字列に変換
minor_version = str(blender_version[1])  # 整数を文字列に変換

# Blenderのインストールディレクトリを取得
blender_install_dir = os.path.dirname(blender_exec_path)

python_path = blender_install_dir + '\\' + major_version + '.' + minor_version + '\\python'

#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 + '>', python_path)

# Blenderのインストールパスをファイルに書き込みます
with open(file_path, 'w') as f:
    f.write(new_content)
print("書き込んだテキスト: ", new_content)

result = check_library()



result = check_library()

if result:
    print("MessagePackライブラリがBlenderに組み込まれています。")
else:
    print("MessagePackライブラリがBlenderに組み込まれていません。")
    # subprocessを使用して.batファイルを実行します。
    subprocess.call(file_path)

次にバッチファイルの中身です。 バッチファイルではpipコマンドを使用します。

@echo off
set PYTHON_PATH=C:\Blender\stable\blender-3.5.0-windows-x64\3.5\python
start explorer %PYTHON_PATH%
pip install msgpack

以上を実行するともしライブラリが導入されていない場合実行しているBlenderPython環境にライブラリがインストールされるようになりました。