#!/usr/bin/env bash # 管道启动器:把命令交给一个真正装了依赖的解释器。 # # 背景(实测踩过的坑):会话里 PATH 上的 python3 可能不是系统解释器, # 而是编辑器工具链自建的 venv(例如 ~/.pi-lens/pip-tools)。 # 那种 venv 里没有 defusedxml,而且关闭了 user site,于是 # `python3 -m dfannals.cli` 会突然报 ModuleNotFoundError。 # 这里主动挑一个能 import defusedxml 的解释器,避免依赖 PATH 的偶然性。 # # scripts/dfannals status|plan|threads|episodes|cast|index|next|run ... # DFANNALS_PYTHON=/path/to/python3 scripts/dfannals status # 也可显式指定 set -euo pipefail HERE="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)" pick_python() { local cand for cand in "${DFANNALS_PYTHON:-}" /usr/bin/python3 python3; do [ -n "$cand" ] || continue command -v "$cand" >/dev/null 2>&1 || continue if "$cand" -c "import defusedxml" >/dev/null 2>&1; then printf '%s' "$cand" return 0 fi done return 1 } PY="$(pick_python)" || { echo "找不到可用解释器:需要一个能 import defusedxml 的 python3。" >&2 echo "装依赖:sudo apt install -y python3-defusedxml" >&2 exit 1 } cd "$HERE" exec "$PY" -m dfannals.cli "$@"