今回はBlenderのPython内で動的にpip installを行う方法を知りましたので残していきます。
〇環境
・Windows 11PC
・Blender4.1
〇PythonコードからPip install
Pythonコード内からPip installを行うためには次のような関数を定義し実行します。
def install_package(package):
subprocess.check_call([sys.executable, "-m", "pip", "install", package])
この処理ではsubprocessを使用してパッケージをインストールしています。
ubprocess.check_callは、指定されたコマンドを実行し、そのコマンドが正常に終了するまで待機します。コマンドがエラーを返した場合、例外が発生します。
sys.executableがPythonの実行パスを返します。
どのあと引数をコマンドとして実行しています。
これは事実上
python -m pip install package
と同じ処理になります。
packageに任意のライブラリを設定することでpip installが可能です。
本日は以上です。
〇コード全文
import os
import bpy
import subprocess
import sys
# BlenderのPython環境でのpipインストールのためのヘルパー関数
def install_package(package):
subprocess.check_call([sys.executable, "-m", "pip", "install", package])
# BlenderのPython環境でのpipアンインストールのためのヘルパー関数
def uninstall_package(package):
subprocess.check_call([sys.executable, "-m", "pip", "uninstall", "-y", package])
# アドオンが有効化される時に呼ばれる関数
def register():
try:
import music21 # 既にインストールされているかチェック
except ImportError:
install_package("music21") # 無ければインストール
print("アドオンが登録され、music21がインストールされました")
gui.register()
# 通常のBlenderアドオンの登録作業
bpy.utils.register_class(MyAddonClass) # アドオンで使用するクラスを登録
# アドオンが無効化される時に呼ばれる関数
def unregister():
# `music21` をアンインストール
uninstall_package("music21")
print("アドオンが解除され、music21がアンインストールされました")
# 通常のBlenderアドオンの解除作業
bpy.utils.unregister_class(MyAddonClass) # アドオンで使用するクラスを解除
gui.unregister()
# アドオンのクラス (例)
class MyAddonClass(bpy.types.Operator):
bl_idname = "wm.my_addon"
bl_label = "My Addon Operator"
def execute(self, context):
# アドオンの機能
self.report({'INFO'}, "Hello from My Addon!")
return {'FINISHED'}