juc500 정상동작
This commit is contained in:
Executable
+114
@@ -0,0 +1,114 @@
|
||||
#!/usr/bin/env bash
|
||||
# Windows 오프라인 초기 설정 — Git Bash / MSYS (cmd.exe 경로 변환 없이 직접 실행)
|
||||
set -euo pipefail
|
||||
ROOT="$(cd "$(dirname "$0")/.." && pwd)"
|
||||
cd "$ROOT"
|
||||
|
||||
WHEELS="$ROOT/vendor/wheels"
|
||||
GETPIP="$ROOT/vendor/get-pip.py"
|
||||
LIBUSB="$ROOT/vendor/libusb-1.0.dll"
|
||||
EMBED_PY="$ROOT/vendor/python-windows/python.exe"
|
||||
VENV_PY="$ROOT/.venv/Scripts/python.exe"
|
||||
MAC_VENV="$ROOT/.venv/bin/python"
|
||||
|
||||
if [[ ! -f "$WHEELS/pyusb-1.2.1-py3-none-any.whl" || ! -f "$LIBUSB" ]]; then
|
||||
echo "[!] vendor 번들이 불완전합니다. 압축 시 vendor/ 폴더를 반드시 포함하세요." >&2
|
||||
echo " 필요: vendor/wheels, vendor/libusb-1.0.dll, vendor/get-pip.py" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Mac .venv 가 zip 에 섞이면 Windows 에서 깨짐
|
||||
if [[ -f "$MAC_VENV" && ! -f "$VENV_PY" ]]; then
|
||||
echo "[*] Mac .venv 제거 중…"
|
||||
rm -rf "$ROOT/.venv"
|
||||
fi
|
||||
|
||||
venv_ok() {
|
||||
[[ -f "$VENV_PY" ]] || return 1
|
||||
PYTHONPATH="$ROOT${PYTHONPATH:+:$PYTHONPATH}" "$VENV_PY" -c "import usb" 2>/dev/null || return 1
|
||||
PYTHONPATH="$ROOT${PYTHONPATH:+:$PYTHONPATH}" "$VENV_PY" -c "
|
||||
from juc500_xfer.usb_link import libusb_path
|
||||
import sys
|
||||
sys.exit(0 if libusb_path() else 1)
|
||||
" 2>/dev/null
|
||||
}
|
||||
|
||||
if venv_ok; then
|
||||
exit 0
|
||||
fi
|
||||
|
||||
echo "============================================"
|
||||
echo " JUC500 Windows 오프라인 초기 설정"
|
||||
echo "============================================"
|
||||
|
||||
pick_boot_py() {
|
||||
if command -v py >/dev/null 2>&1; then
|
||||
if py -3 -c "import sys" 2>/dev/null; then
|
||||
echo "py -3"
|
||||
return 0
|
||||
fi
|
||||
fi
|
||||
if command -v python >/dev/null 2>&1; then
|
||||
if python -c "import sys" 2>/dev/null; then
|
||||
echo "python"
|
||||
return 0
|
||||
fi
|
||||
fi
|
||||
if [[ -f "$EMBED_PY" ]]; then
|
||||
echo "$EMBED_PY"
|
||||
echo "Using vendored Python: vendor/python-windows/python.exe" >&2
|
||||
return 0
|
||||
fi
|
||||
return 1
|
||||
}
|
||||
|
||||
BOOT_PY="$(pick_boot_py)" || {
|
||||
echo "[!] Python 없음. vendor/python-windows 가 있는지 확인하세요." >&2
|
||||
exit 1
|
||||
}
|
||||
echo "Bootstrap: $BOOT_PY"
|
||||
|
||||
run_boot() {
|
||||
# shellcheck disable=SC2086
|
||||
$BOOT_PY "$@"
|
||||
}
|
||||
|
||||
if ! run_boot -c "import virtualenv" 2>/dev/null; then
|
||||
echo "Installing virtualenv from vendor/wheels …"
|
||||
if ! run_boot -m pip install --no-index --find-links="$WHEELS" virtualenv 2>/dev/null; then
|
||||
if [[ -f "$GETPIP" ]]; then
|
||||
run_boot "$GETPIP" --no-index --find-links="$WHEELS" pip setuptools wheel
|
||||
run_boot -m pip install --no-index --find-links="$WHEELS" virtualenv
|
||||
else
|
||||
echo "[!] virtualenv 설치 실패" >&2
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
|
||||
if [[ ! -f "$VENV_PY" ]]; then
|
||||
echo "Creating .venv (offline)…"
|
||||
run_boot -m virtualenv --no-periodic-update --no-setuptools --no-pip "$ROOT/.venv"
|
||||
run_boot "$GETPIP" --no-index --find-links="$WHEELS" pip setuptools wheel packaging
|
||||
elif ! "$VENV_PY" -m pip --version >/dev/null 2>&1; then
|
||||
echo "[*] .venv 손상 — 재생성…"
|
||||
rm -rf "$ROOT/.venv"
|
||||
run_boot -m virtualenv --no-periodic-update --no-setuptools --no-pip "$ROOT/.venv"
|
||||
run_boot "$GETPIP" --no-index --find-links="$WHEELS" pip setuptools wheel packaging
|
||||
fi
|
||||
|
||||
echo "Installing dependencies from vendor/wheels (no PyPI)…"
|
||||
"$VENV_PY" -m pip install --no-index --find-links="$WHEELS" -U pip setuptools wheel packaging
|
||||
"$VENV_PY" -m pip install --no-index --find-links="$WHEELS" -r "$ROOT/requirements.txt"
|
||||
"$VENV_PY" -m pip install --no-index --find-links="$WHEELS" --no-build-isolation -e "$ROOT"
|
||||
|
||||
cp -f "$LIBUSB" "$ROOT/.venv/Scripts/libusb-1.0.dll"
|
||||
echo "libusb-1.0.dll → .venv/Scripts/"
|
||||
|
||||
if ! venv_ok; then
|
||||
echo "[!] 초기 설정 후에도 .venv 검증 실패" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "[*] Windows 초기 설정 완료"
|
||||
exit 0
|
||||
Reference in New Issue
Block a user