diff --git a/src/bonsai/bonsai/bim/module/light/__init__.py b/src/bonsai/bonsai/bim/module/light/__init__.py index 5c3c25ae58..af36d43f4b 100644 --- a/src/bonsai/bonsai/bim/module/light/__init__.py +++ b/src/bonsai/bonsai/bim/module/light/__init__.py @@ -24,7 +24,21 @@ from pathlib import Path import importlib import importlib.util -import pyradiance +import traceback + +# There are unresolved problems with pyradiance import that we couldn't narrow down. +# So import is optional not to make it a showstopper for random users, +# who don't even need pyradiance. +# See #6633. +try: + import pyradiance +except ImportError as e: + print(traceback.format_exc()) + print( + "PyRadiance is not available. Pyradiance Rendering functionality will be disabled. " + "See above for more detailed import traceback." + ) + pyradiance = None def get_pyradiance_path(): @@ -58,12 +72,14 @@ classes = ( def register(): bpy.types.Scene.BIMRadianceExporeterProperies = bpy.props.PointerProperty(type=prop.RadianceExporterProperties) bpy.types.Scene.BIMSolarProperties = bpy.props.PointerProperty(type=prop.BIMSolarProperties) - pyradiance_path = Path(get_pyradiance_path()) - bin_path = pyradiance_path / "bin" - if bin_path.exists(): - for file in bin_path.iterdir(): - if file.is_file(): - file.chmod(file.stat().st_mode | stat.S_IEXEC) + + if pyradiance: + pyradiance_path = Path(get_pyradiance_path()) + bin_path = pyradiance_path / "bin" + if bin_path.exists(): + for file in bin_path.iterdir(): + if file.is_file(): + file.chmod(file.stat().st_mode | stat.S_IEXEC) def unregister(): diff --git a/src/bonsai/bonsai/bim/module/light/operator.py b/src/bonsai/bonsai/bim/module/light/operator.py index 40a68df33b..0efc04f852 100644 --- a/src/bonsai/bonsai/bim/module/light/operator.py +++ b/src/bonsai/bonsai/bim/module/light/operator.py @@ -21,7 +21,6 @@ import os try: import pyradiance as pr except ImportError: - print("PyRadiance is not available. Rendering functionality will be disabled.") pr = None from datetime import datetime diff --git a/src/bonsai/bonsai/bim/module/light/ui.py b/src/bonsai/bonsai/bim/module/light/ui.py index 35cf36d306..a9ffad8507 100644 --- a/src/bonsai/bonsai/bim/module/light/ui.py +++ b/src/bonsai/bonsai/bim/module/light/ui.py @@ -21,6 +21,11 @@ import bonsai.tool as tool from typing import TYPE_CHECKING from bonsai.bim.module.light.data import SolarData +try: + import pyradiance +except ImportError: + pyradiance = None + class BIM_PT_radiance_exporter(bpy.types.Panel): """Creates a Panel in the render properties window""" @@ -38,6 +43,13 @@ class BIM_PT_radiance_exporter(bpy.types.Panel): layout = self.layout props = tool.Blender.get_radiance_exporter_props() + if pyradiance is None: + box = layout.box() + box.label(text="There was a problem importing Pyradiance", icon="ERROR") + box.label(text="and it's functionality is not available.") + box.label(text="See system console logs at Bonsai startup.") + return + if tool.Ifc.get(): row = self.layout.row() row.prop(props, "should_load_from_memory")