Skip to content

Commit 3b124fc

Browse files
committed
fix: 修复启动器共享 quant venv 探测
1 parent 0bc6a41 commit 3b124fc

3 files changed

Lines changed: 96 additions & 12 deletions

File tree

QuantClass Sync.command

Lines changed: 29 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -134,7 +134,7 @@ _try_activate_project_venv() {
134134
local venv_python="$PROJECT_DIR/.venv/bin/python"
135135

136136
if [ ! -x "$venv_python" ]; then
137-
_log_fallback "未找到项目 .venv,尝试系统 python3..."
137+
_log_fallback "未找到项目 .venv,尝试共享 quant .venv..."
138138
return 1
139139
fi
140140

@@ -148,6 +148,26 @@ _try_activate_project_venv() {
148148
return 0
149149
}
150150

151+
# 兼容当前仓库约定的共享 quant 工作区 .venv。
152+
_try_activate_workspace_venv() {
153+
local workspace_venv_python="$HOME/workspace/quant/.venv/bin/python"
154+
local workspace_venv_activate="$HOME/workspace/quant/.venv/bin/activate"
155+
156+
if [ ! -x "$workspace_venv_python" ]; then
157+
_log_fallback "未找到共享 quant .venv,尝试系统 python3..."
158+
return 1
159+
fi
160+
161+
if [ -f "$workspace_venv_activate" ]; then
162+
# shellcheck disable=SC1090
163+
source "$workspace_venv_activate"
164+
fi
165+
166+
PYTHON="$workspace_venv_python"
167+
ENV_TYPE="workspace_venv"
168+
return 0
169+
}
170+
151171
# 最后兜底系统 python3。
152172
_try_use_system_python() {
153173
if ! command -v python3 >/dev/null 2>&1; then
@@ -180,15 +200,15 @@ _print_dependency_help() {
180200
echo "错误:依赖安装失败,请手动执行:"
181201
echo " $PYTHON -m pip install -r requirements.txt"
182202
;;
183-
venv)
203+
venv|workspace_venv)
184204
if "$PYTHON" -m pip --version >/dev/null 2>&1; then
185205
echo "错误:依赖安装失败,请手动执行:"
186206
echo " $PYTHON -m pip install -r requirements.txt"
187207
elif command -v uv >/dev/null 2>&1; then
188-
echo "错误:当前 .venv 没有 pip,请手动执行:"
208+
echo "错误:当前虚拟环境没有 pip,请手动执行:"
189209
echo " uv pip install --python \"$PYTHON\" -r requirements.txt"
190210
else
191-
echo "错误:当前 .venv 没有 pip,且系统未找到 uv。"
211+
echo "错误:当前虚拟环境没有 pip,且系统未找到 uv。"
192212
echo "请先安装 pip 或 uv 后重试。"
193213
fi
194214
;;
@@ -219,8 +239,8 @@ _install_requirements_if_needed() {
219239
echo "检测到 conda 环境缺少依赖,正在安装..."
220240
"$PYTHON" -m pip install -r requirements.txt
221241
;;
222-
venv)
223-
echo "检测到项目 .venv 缺少依赖,正在安装..."
242+
venv|workspace_venv)
243+
echo "检测到虚拟环境缺少依赖,正在安装..."
224244
if "$PYTHON" -m pip --version >/dev/null 2>&1; then
225245
"$PYTHON" -m pip install -r requirements.txt
226246
elif command -v uv >/dev/null 2>&1; then
@@ -242,12 +262,13 @@ _install_requirements_if_needed() {
242262
fi
243263
}
244264

245-
if ! _try_activate_conda && ! _try_activate_project_venv && ! _try_use_system_python; then
265+
if ! _try_activate_conda && ! _try_activate_project_venv && ! _try_activate_workspace_venv && ! _try_use_system_python; then
246266
echo "错误:未找到可用 Python 环境。"
247267
echo "建议安装以下任一环境:"
248268
echo " 1. conda,并在 user_config.json 中填写 conda_env"
249269
echo " 2. 项目根目录 .venv,可用 uv 创建:uv venv .venv"
250-
echo " 3. 系统 python3,并确保命令行可访问"
270+
echo " 3. 共享 quant .venv,路径为 ~/workspace/quant/.venv"
271+
echo " 4. 系统 python3,并确保命令行可访问"
251272
_pause_and_exit 1
252273
fi
253274

tests/test_install.sh

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -223,13 +223,16 @@ print_e3_checklist() {
223223
echo " E3.3 项目目录存在 .venv,且 conda 不可用或 conda_env 无效 -> 双击"
224224
echo " 验收: 启动日志显示走 .venv 分支,GUI 正常弹出"
225225
echo ""
226-
echo " E3.4 无 conda、无 .venv,仅系统 python3 -> 双击"
226+
echo " E3.4 无 conda、无项目 .venv,但存在 ~/workspace/quant/.venv -> 双击"
227+
echo " 验收: 启动日志显示走共享 quant .venv,GUI 正常弹出"
228+
echo ""
229+
echo " E3.5 无 conda、无 .venv,仅系统 python3 -> 双击"
227230
echo " 验收: 看到手动安装依赖提示,不是空白闪退"
228231
echo ""
229-
echo " E3.5 conda 已安装,但 user_config.json 中的 conda_env 指向不存在环境 -> 双击"
230-
echo " 验收: 日志显示 fallback .venv 或系统 python3"
232+
echo " E3.6 conda 已安装,但 user_config.json 中的 conda_env 指向不存在环境 -> 双击"
233+
echo " 验收: 日志显示 fallback 到项目 .venv、共享 quant .venv 或系统 python3"
231234
echo ""
232-
echo " E3.6 .venv 存在但 pip 不可用,且系统装有 uv -> 双击"
235+
echo " E3.7 .venv 存在但 pip 不可用,且系统装有 uv -> 双击"
233236
echo " 验收: 依赖安装走 uv pip install --python ..."
234237
echo ""
235238
}

tests/test_launcher_selection.sh

Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
#!/bin/bash
2+
3+
set -euo pipefail
4+
5+
PROJECT_DIR="$(cd "$(dirname "$0")/.." && pwd)"
6+
TMP_ROOT="$(mktemp -d)"
7+
trap 'rm -rf "$TMP_ROOT"' EXIT
8+
9+
HARNESS_DIR="$TMP_ROOT/harness"
10+
FAKE_HOME="$TMP_ROOT/home"
11+
FAKE_BIN="$TMP_ROOT/bin"
12+
13+
mkdir -p "$HARNESS_DIR" "$FAKE_HOME/workspace/quant/.venv/bin" "$FAKE_BIN"
14+
15+
cp "$PROJECT_DIR/QuantClass Sync.command" "$HARNESS_DIR/QuantClass Sync.command"
16+
cp "$PROJECT_DIR/requirements.txt" "$HARNESS_DIR/requirements.txt"
17+
chmod +x "$HARNESS_DIR/QuantClass Sync.command"
18+
19+
cat > "$FAKE_HOME/workspace/quant/.venv/bin/python" <<'EOF'
20+
#!/bin/bash
21+
set -euo pipefail
22+
23+
if [ "${1:-}" = "-c" ]; then
24+
code="${2:-}"
25+
if [[ "$code" == *"from quantclass_sync_internal import cli"* ]]; then
26+
exit 0
27+
fi
28+
exit 0
29+
fi
30+
31+
if [ "${1:-}" = "quantclass_sync.py" ] && [ "${2:-}" = "gui" ]; then
32+
exit 0
33+
fi
34+
35+
echo "unexpected shared python invocation: $*" >&2
36+
exit 1
37+
EOF
38+
chmod +x "$FAKE_HOME/workspace/quant/.venv/bin/python"
39+
40+
cat > "$FAKE_BIN/python3" <<'EOF'
41+
#!/bin/bash
42+
set -euo pipefail
43+
44+
if [ "${1:-}" = "-c" ]; then
45+
exit 0
46+
fi
47+
48+
echo "system python3 should not be selected" >&2
49+
exit 99
50+
EOF
51+
chmod +x "$FAKE_BIN/python3"
52+
53+
OUTPUT="$(
54+
HOME="$FAKE_HOME" \
55+
PATH="$FAKE_BIN:/usr/bin:/bin" \
56+
bash "$HARNESS_DIR/QuantClass Sync.command" </dev/null 2>&1 || true
57+
)"
58+
59+
echo "$OUTPUT" | grep -q "已选择环境类型: workspace_venv"
60+
echo "$OUTPUT" | grep -q "Python 路径: $FAKE_HOME/workspace/quant/.venv/bin/python"

0 commit comments

Comments
 (0)