-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathinstall.command
More file actions
executable file
·60 lines (57 loc) · 3.43 KB
/
Copy pathinstall.command
File metadata and controls
executable file
·60 lines (57 loc) · 3.43 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
53
54
55
56
57
58
59
60
#!/bin/bash
set -euo pipefail
trap 'printf "\nУстановка прервана (строка %s). Исправьте указанную ошибку и повторите install.command. Данные сохраняются.\n" "$LINENO" >&2' ERR
source "$(cd -- "$(dirname -- "$0")" && pwd -P)/environment.sh"
if [[ "$(uname -s)" != Darwin || "$(uname -m)" != arm64 ]]; then
printf 'Ошибка: требуется macOS на Apple Silicon, без Rosetta.\n' >&2
exit 1
fi
if ! qwen_select_python; then
printf 'Подготовка официального Python 3.12.10 в папке проекта…\n'
QWEN_PKG="$QWEN_ROOT/data/cache/python-3.12.10-macos11.pkg"
QWEN_SHA=8373e58da4ea146b3eb1c1f9834f19a319440b6b679b06050b1f9ee3237aa8e4
if [[ ! -f "$QWEN_PKG" ]] || [[ "$(shasum -a 256 "$QWEN_PKG" | cut -d ' ' -f 1)" != "$QWEN_SHA" ]]; then
/usr/bin/curl --fail --location --retry 3 --connect-timeout 30 \
'https://www.python.org/ftp/python/3.12.10/python-3.12.10-macos11.pkg' \
--output "$QWEN_PKG.part"
if [[ "$(shasum -a 256 "$QWEN_PKG.part" | cut -d ' ' -f 1)" != "$QWEN_SHA" ]]; then
printf 'Ошибка: контрольная сумма установщика Python не совпала.\n' >&2
exit 1
fi
mv -- "$QWEN_PKG.part" "$QWEN_PKG"
fi
/usr/sbin/pkgutil --check-signature "$QWEN_PKG" > "$QWEN_ROOT/data/logs/python-signature.txt"
QWEN_EXPAND="$(mktemp -d "$TMPDIR/python-package.XXXXXX")"
/usr/sbin/pkgutil --expand-full "$QWEN_PKG" "$QWEN_EXPAND/package"
mkdir -p "$QWEN_ROOT/.python/Python.framework"
cp -R "$QWEN_EXPAND/package/Python_Framework.pkg/Payload/." "$QWEN_ROOT/.python/Python.framework/"
touch "$QWEN_ROOT/.python/.ready-3.12.10"
# Only this freshly allocated extraction directory is removed.
rm -rf -- "$QWEN_EXPAND"
qwen_select_python
fi
if ! qwen_check_python; then
# A subsequent install can repair an interrupted local runtime copy.
if [[ "$QWEN_PYTHON" == "$QWEN_ROOT/.python/"* ]]; then
rm -f -- "$QWEN_ROOT/.python/.ready-3.12.10"
fi
exit 1
fi
printf 'Подготовка отдельного окружения…\n'
"$QWEN_PYTHON" -m venv --copies "$QWEN_ROOT/.venv"
if [[ ! -s "$QWEN_ROOT/requirements.lock.txt" ]]; then
"$QWEN_ROOT/.venv/bin/python" -m pip install --upgrade pip
QWEN_REQUIREMENTS="$QWEN_ROOT/requirements.in"
else
QWEN_REQUIREMENTS="$QWEN_ROOT/requirements.lock.txt"
fi
printf 'Установка закреплённых пакетов. MLX и Metal устанавливаются только из wheel…\n'
if ! "$QWEN_ROOT/.venv/bin/python" -m pip install --only-binary=mlx,mlx-metal -r "$QWEN_REQUIREMENTS"; then
printf 'Не удалось установить зависимости. Проверьте сеть и наличие wheel MLX/MLX-Metal для этой версии macOS и Python. Сборка MLX из исходников не выполняется.\n' >&2
exit 1
fi
"$QWEN_ROOT/.venv/bin/python" -m pip check
"$QWEN_ROOT/.venv/bin/python" -m pip freeze > "$QWEN_ROOT/requirements.lock.txt.pending"
mv -- "$QWEN_ROOT/requirements.lock.txt.pending" "$QWEN_ROOT/requirements.lock.txt"
printf '%s\n' "$QWEN_ROOT" > "$QWEN_ROOT/data/cache/venv-root.txt"
printf '\nУстановка завершена. Приложение и модели не запускались.\nЗапуск вручную: "%s/run.command"\n' "$QWEN_ROOT"