diff --git a/meshroom/core/plugins.py b/meshroom/core/plugins.py index 680a00ae..443b608f 100644 --- a/meshroom/core/plugins.py +++ b/meshroom/core/plugins.py @@ -11,6 +11,7 @@ from pathlib import Path from meshroom.common import BaseObject from meshroom.core import desc +from meshroom.core.desc.node import _MESHROOM_ROOT def validateNodeDesc(nodeDesc: desc.Node) -> list: """ @@ -82,6 +83,36 @@ class ProcessEnv(BaseObject): return "" +class DirTreeProcessEnv(ProcessEnv): + """ + """ + def __init__(self, folder: str, envType: ProcessEnvType = ProcessEnvType.DEFAULT, uri: str = ""): + super().__init__(folder, envType) + if envType == ProcessEnvType.REZ: + raise RuntimeError("Wrong process environment type.") + if not uri and envType != ProcessEnvType.DEFAULT: + raise RuntimeError("URI should be provided for the process environment.") + + self.uri = uri + self.binPaths: list = [str(Path(folder, "bin"))] + self.libPaths: list = [str(Path(folder, "lib")), str(Path(folder, "lib64"))] + self.pythonPaths: list = [str(Path(folder))] + self.binPaths + + def getEnvDict(self) -> dict: + env = os.environ.copy() + env["PYTHONPATH"] = f"{_MESHROOM_ROOT}{os.pathsep}{os.pathsep.join(self.pythonPaths)}{os.pathsep}{os.getenv('PYTHONPATH', '')}" + env["LD_LIBRARY_PATH"] = f"{os.pathsep.join(self.libPaths)}{os.pathsep}{os.getenv('LD_LIBRARY_PATH', '')}" + env["PATH"] = f"{os.pathsep.join(self.binPaths)}{os.pathsep}{os.getenv('PATH', '')}" + + return env + + def getCommandPrefix(self) -> str: + if self._processEnvType == ProcessEnvType.CONDA: + return f"conda run -n {self.uri} " + if self._processEnvType == ProcessEnvType.VIRTUALENV: + return f"{self.uri}/bin/python " + return super().getCommandPrefix() + class NodePluginStatus(Enum): """