Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 13 additions & 0 deletions blender-addon/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,19 @@
"category": "3D View"
}


def _add_dependencies_to_sys_path():
""" Add the dependencies of Mastodon Blender View addon to the pythons system path. """
import sys
import os
addon_dir = os.path.dirname(__file__)
addon_libs_dir = os.path.join(addon_dir, "libs")
if addon_libs_dir not in sys.path:
sys.path.insert(0, addon_libs_dir)


_add_dependencies_to_sys_path()

from . import mb_panel
from . import mb_server

Expand Down
95 changes: 60 additions & 35 deletions src/main/resources/blender-scripts/install_addon.py
Original file line number Diff line number Diff line change
Expand Up @@ -33,56 +33,81 @@
import sys
import addon_utils

# install pip

def get_python_path():
try:
# 2.92 and older
path = bpy.app.binary_path_python
except AttributeError:
# 2.93 and later
path = sys.executable
return os.path.abspath(path)
def main():
print("start installing mastodon blender view addon...")
install_mastodon_blender_view_addon()
print("mastodon blender view addon installed")
print("install pip if needed...")
install_pip()
print("pip is installed")
addon_dir = get_mastodon_blender_view_addon_dir()
print(f"Installation directory of the Mastodon Blender View addon: {addon_dir}")
install_dependencies(packages=['grpcio', 'bidict', 'grpcio-tools', 'pandas'], target=os.path.join(addon_dir, "libs"))
import_dependencies()
print("dependencies installed")
compile_grpc_protocol(addon_dir)
print("google RPC code compiled")


def install_mastodon_blender_view_addon():
argv = sys.argv
addon_zip = argv[argv.index('--') + 1]
bpy.ops.preferences.addon_install(filepath=addon_zip)


def install_pip():
os.environ.pop("PIP_REQ_TRACKER", None)
ensurepip.bootstrap()
os.environ.pop("PIP_REQ_TRACKER", None)


os.environ.pop("PIP_REQ_TRACKER", None)
ensurepip.bootstrap()
os.environ.pop("PIP_REQ_TRACKER", None)
def get_mastodon_blender_view_addon_dir() -> str:
filename_init_py = [m.__file__ for m in addon_utils.modules() if m.__name__ == "mastodon_blender_view"][0]
addon_dir = os.path.dirname(filename_init_py)
return addon_dir

# install dependencies

python_path = get_python_path()
packages = {'grpcio', 'bidict', 'grpcio-tools', 'pandas'}
subprocess.check_output([python_path, '-m', 'pip', 'install', *packages])
def install_dependencies(packages: list[str], target: str):
print(f"Install dependencies into folder: {target}")

# test if dependencies are installed
subprocess.check_call([get_python_path(), "-m", "pip", "install", "--target", target, *packages])

try:
if target not in sys.path: # add addon libs dir to system path
sys.path.insert(0, target)


def import_dependencies():
import bidict
import grpc
import google.protobuf
import pandas
except ModuleNotFoundError:
raise Exception("dependency installation failed")

print("dependencies installed")

# install addon
def compile_grpc_protocol(addon_dir):
cmd = [get_python_path(), '-m', 'grpc_tools.protoc', '-I.', '--python_out=.', '--grpc_python_out=.',
'mastodon_blender_view/mastodon-blender-view.proto']
cwd = os.path.dirname(addon_dir)
env = os.environ.copy()
addon_libs_dir = os.path.join(addon_dir, "libs")
env["PYTHONPATH"] = addon_libs_dir + os.pathsep + env.get("PYTHONPATH") if "PYTHONPATH" in env else addon_libs_dir
subprocess.check_output(cmd, cwd=cwd, env=env)

argv = sys.argv
addon_zip = argv[argv.index('--') + 1]
bpy.ops.preferences.addon_install(filepath=addon_zip)
try:
from mastodon_blender_view import mastodon_blender_view_pb2
from mastodon_blender_view import mastodon_blender_view_pb2_grpc
except ModuleNotFoundError:
raise Exception("installing google RPC generated code failed")

print("mastodon blender view addon installed")

filename_init_py = [m.__file__ for m in addon_utils.modules() if m.__name__ == "mastodon_blender_view"][0]
addon_dir = os.path.dirname(filename_init_py)
subprocess.check_output([python_path, '-m', 'grpc_tools.protoc', '-I.', '--python_out=.', '--grpc_python_out=.', 'mastodon_blender_view/mastodon-blender-view.proto'], cwd=os.path.dirname(addon_dir))
def get_python_path():
try:
# 2.92 and older
path = bpy.app.binary_path_python
except AttributeError:
# 2.93 and later
path = sys.executable
return os.path.abspath(path)

try:
from mastodon_blender_view import mastodon_blender_view_pb2
from mastodon_blender_view import mastodon_blender_view_pb2_grpc
except ModuleNotFoundError:
raise Exception("installing google RPC generated code failed")

print("google RPC code compiled")
main()
3 changes: 3 additions & 0 deletions src/main/resources/csv/read_csv.py
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,9 @@
###
import os
import bpy

bpy.ops.preferences.addon_enable(module='mastodon_blender_view') # "pandas" can only be imported after enabling the addon

import pandas as pd
import csv
from collections import defaultdict
Expand Down