Spaces:
Sleeping
Sleeping
File size: 1,784 Bytes
589e75e |
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 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 |
#!/usr/bin/env bash
set -euo pipefail
# Some hardened environments (e.g., newer glibc / gVisor) refuse to dlopen()
# shared objects that request an executable stack. Certain PyTorch builds can
# ship with this flag set on libtorch_cpu.so. Clearing it fixes torch import.
python - <<'PY'
import os, site, glob
paths = []
for fn in (getattr(site, "getsitepackages", None), getattr(site, "getusersitepackages", None)):
if fn is None:
continue
try:
p = fn()
if isinstance(p, str):
paths.append(p)
else:
paths.extend(list(p))
except Exception:
pass
targets = []
for p in paths:
targets += glob.glob(os.path.join(p, "torch", "lib", "libtorch_cpu.so"))
targets += glob.glob(os.path.join(p, "torch", "lib", "libtorch_python.so"))
print("\n".join(sorted(set(targets))))
PY
TARGETS="$(python - <<'PY'
import os, site, glob
paths = []
for fn in (getattr(site, "getsitepackages", None), getattr(site, "getusersitepackages", None)):
if fn is None:
continue
try:
p = fn()
if isinstance(p, str):
paths.append(p)
else:
paths.extend(list(p))
except Exception:
pass
targets = []
for p in paths:
targets += glob.glob(os.path.join(p, "torch", "lib", "libtorch_cpu.so"))
targets += glob.glob(os.path.join(p, "torch", "lib", "libtorch_python.so"))
print(" ".join(sorted(set(targets))))
PY
)"
if [[ -z "${TARGETS}" ]]; then
echo "postBuild: no torch .so targets found yet (torch may not be installed)."
exit 0
fi
for so in ${TARGETS}; do
if [[ -f "${so}" ]]; then
echo "postBuild: clearing execstack on ${so}"
# If it fails (e.g. already clear), continue.
patchelf --clear-execstack "${so}" || true
fi
done
|