oscillode/blender_maxwell/operators/install_deps.py

63 lines
1.7 KiB
Python

import sys
import subprocess
from pathlib import Path
import bpy
from . import types
class BlenderMaxwellInstallDependenciesOperator(bpy.types.Operator):
bl_idname = types.BlenderMaxwellInstallDependencies
bl_label = "Install Dependencies for Blender Maxwell Addon"
def execute(self, context):
addon_dir = Path(__file__).parent.parent
requirements_path = addon_dir / 'requirements.txt'
#addon_specific_folder = addon_dir / '.dependencies'
addon_specific_folder = Path("/home/sofus/src/college/bsc_ge/thesis/code/.cached-dependencies")
# Create the Addon-Specific Folder
addon_specific_folder.mkdir(parents=True, exist_ok=True)
# Determine Path to Blender's Bundled Python
python_exec = Path(sys.executable)
## bpy.app.binary_path_python was deprecated in 2.91.
## sys.executable points to the correct bundled Python.
## See <https://developer.blender.org/docs/release_notes/2.91/python_api/>
# Install Dependencies w/Bundled pip
try:
subprocess.check_call([
str(python_exec), '-m',
'pip', 'install',
'-r', str(requirements_path),
'--target', str(addon_specific_folder),
])
self.report(
{'INFO'},
"Dependencies for 'blender_maxwell' installed successfully."
)
except subprocess.CalledProcessError as e:
self.report(
{'ERROR'},
f"Failed to install dependencies: {str(e)}"
)
return {'CANCELLED'}
# Install Dependencies w/Bundled pip
if str(addon_specific_folder) not in sys.path:
sys.path.insert(0, str(addon_specific_folder))
return {'FINISHED'}
####################
# - Blender Registration
####################
BL_REGISTER = [
BlenderMaxwellInstallDependenciesOperator,
]
BL_KMI_REGISTER = []