Repository navigation
Expand file tree
/
Copy pathinit_process.py
More file actions
52 lines (42 loc) · 2.07 KB
/
Copy pathinit_process.py
File metadata and controls
52 lines (42 loc) · 2.07 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
import sys
from pathlib import Path
class InitProcess:
# PROCESS bundled venv (compiled extension + package metadata)
def __init__(self):
self._PROCESS_ROOT = Path(__file__).resolve().parent / "PROCESS"
self._PY_TAG = f"python{sys.version_info.major}.{sys.version_info.minor}"
def _has_process_package(self, site_packages: Path) -> bool:
if (site_packages / "process").is_dir():
return True
if (site_packages / "_editable_impl_process.pth").is_file():
return True
return any(site_packages.glob("process-*.dist-info"))
def _process_site_packages(self, process_root: Path) -> Path:
lib_dir = process_root / "venv" / "lib"
venv_py = process_root / "venv" / "bin" / "python"
preferred = lib_dir / self._PY_TAG / "site-packages"
if self._has_process_package(preferred):
return preferred
for candidate in sorted(lib_dir.glob("python*/site-packages")):
if self._has_process_package(candidate):
if candidate != preferred:
raise RuntimeError(
"PROCESS venv Python version does not match the current interpreter.\n"
f" current: Python {sys.version_info.major}.{sys.version_info.minor}\n"
f" venv: {candidate.parent.name}\n"
f"Run: {venv_py} {Path(__file__).name}"
)
return candidate
raise RuntimeError(
"PROCESS package not found in venv. Create or sync PROCESS/venv, then run:\n"
f" {venv_py} {Path(__file__).name}"
)
def init_process(self, input_data_path: Path):
_VENV_SITE = self._process_site_packages(self._PROCESS_ROOT)
sys.path.insert(0, str(_VENV_SITE))
from process.main import SingleRun, setup_loggers
setup_loggers()
input_path = (self._PROCESS_ROOT / input_data_path).resolve()
single_run = SingleRun(input_path.as_posix())
models_process = single_run.models
return models_process