Daankular/models / Wan2GP /shared /native_runtime.py
Daankular's picture
download
raw
2.25 kB
from __future__ import annotations
import ctypes
import os
import sys
from pathlib import Path
_PRELOADED_LIBSTDCXX: str | None = None
def _loaded_libstdcxx_paths() -> list[str]:
if not sys.platform.startswith("linux"):
return []
maps_path = Path("/proc/self/maps")
if not maps_path.is_file():
return []
paths: list[str] = []
try:
with maps_path.open("r", encoding="utf-8") as reader:
for line in reader:
if "libstdc++.so.6" not in line:
continue
path = line.rsplit(None, 1)[-1]
if path not in paths:
paths.append(path)
except OSError:
return []
return paths
def _candidate_libstdcxx_paths() -> list[str]:
prefixes = [sys.prefix, sys.exec_prefix, os.environ.get("CONDA_PREFIX")]
paths: list[str] = []
seen: set[str] = set()
for prefix in prefixes:
if not prefix:
continue
path = str(Path(prefix) / "lib" / "libstdc++.so.6")
norm_path = os.path.normcase(os.path.abspath(path))
if norm_path in seen or not os.path.isfile(path):
continue
seen.add(norm_path)
paths.append(path)
return paths
def _prepend_library_path(path: str) -> None:
directory = os.path.dirname(path)
if not directory:
return
current = os.environ.get("LD_LIBRARY_PATH", "")
parts = [part for part in current.split(os.pathsep) if part]
if directory in parts:
return
os.environ["LD_LIBRARY_PATH"] = os.pathsep.join([directory, *parts])
def preload_preferred_libstdcxx() -> str | None:
global _PRELOADED_LIBSTDCXX
if _PRELOADED_LIBSTDCXX is not None:
return _PRELOADED_LIBSTDCXX
if not sys.platform.startswith("linux"):
return None
loaded_paths = _loaded_libstdcxx_paths()
if loaded_paths:
return None
for path in _candidate_libstdcxx_paths():
try:
mode = getattr(os, "RTLD_GLOBAL", 0) | getattr(os, "RTLD_NOW", 0)
ctypes.CDLL(path, mode=mode)
except OSError:
continue
_prepend_library_path(path)
_PRELOADED_LIBSTDCXX = path
return path
return None

Xet Storage Details

Size:
2.25 kB
·
Xet hash:
b2c50c2103ec14e800cd9d1a9489fef24362923b9fd57f0e56d4442d8fec5421

Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.