-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathQuantClass Sync.command
More file actions
executable file
·129 lines (116 loc) · 3.85 KB
/
QuantClass Sync.command
File metadata and controls
executable file
·129 lines (116 loc) · 3.85 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
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
#!/bin/bash
# QuantClass Sync GUI 启动脚本(macOS 双击运行)
# conda 环境名存储在 user_config.json 的 conda_env 字段
cd "$(dirname "$0")" || exit 1
CONFIG_FILE="user_config.json"
# 从 user_config.json 读取 conda_env(用 python 解析 JSON,避免依赖 jq)
_read_conda_env() {
python3 -c "
import json, sys
try:
data = json.load(open('$CONFIG_FILE'))
env = data.get('conda_env', '')
print(env if env else '', end='')
except Exception:
print('', end='')
" 2>/dev/null
}
# 将 conda_env 写入 user_config.json(保留其他字段)
_write_conda_env() {
python3 -c "
import json, sys
env = '$1'
try:
data = json.load(open('$CONFIG_FILE'))
except Exception:
data = {}
data['conda_env'] = env
with open('$CONFIG_FILE', 'w') as f:
json.dump(data, f, ensure_ascii=False, indent=2)
f.write('\n')
" 2>/dev/null
}
# 读取或首次设置 conda 环境名
CONDA_ENV=$(_read_conda_env)
if [ -z "$CONDA_ENV" ]; then
echo "=== QuantClass Sync 首次启动 ==="
echo ""
echo "请输入用于运行本项目的 conda 环境名(如 base、quant 等):"
read -r CONDA_ENV
if [ -z "$CONDA_ENV" ]; then
echo "错误:环境名不能为空。"
echo "按任意键退出..."
read -n 1
exit 1
fi
_write_conda_env "$CONDA_ENV"
echo "已保存环境名: $CONDA_ENV"
echo ""
fi
# 激活 conda 环境
# 尝试常见的 conda 初始化路径
if [ -f "$HOME/miniconda3/etc/profile.d/conda.sh" ]; then
source "$HOME/miniconda3/etc/profile.d/conda.sh"
elif [ -f "$HOME/anaconda3/etc/profile.d/conda.sh" ]; then
source "$HOME/anaconda3/etc/profile.d/conda.sh"
elif [ -f "$HOME/miniforge3/etc/profile.d/conda.sh" ]; then
source "$HOME/miniforge3/etc/profile.d/conda.sh"
elif [ -f "/opt/homebrew/Caskroom/miniconda/base/etc/profile.d/conda.sh" ]; then
source "/opt/homebrew/Caskroom/miniconda/base/etc/profile.d/conda.sh"
elif command -v conda &> /dev/null; then
eval "$(conda shell.bash hook)"
else
echo "错误:未找到 conda。请确认已安装 conda 并可通过终端访问。"
echo ""
echo "按任意键退出..."
read -n 1
exit 1
fi
if ! conda activate "$CONDA_ENV"; then
echo "错误:无法激活 conda 环境 '$CONDA_ENV'。"
echo "请检查环境名是否正确,或编辑 $CONFIG_FILE 中的 conda_env 字段。"
echo ""
echo "按任意键退出..."
read -n 1
exit 1
fi
echo "已激活环境: $CONDA_ENV"
echo "Python 路径: $(which python)"
echo ""
# 检查 requirements.txt 是否存在
if [ ! -f "requirements.txt" ]; then
echo "错误:未找到 requirements.txt,请重新下载完整安装包。"
echo ""
echo "按任意键退出..."
read -n 1
exit 1
fi
# 依赖检测:验证核心包、GUI 包、数据处理包
if ! python -c "from quantclass_sync_internal import cli; import webview; import pandas" 2>/dev/null; then
echo "首次运行,正在安装依赖..."
pip install -r requirements.txt
echo ""
# 再次检测(不静默 stderr,方便诊断安装后仍失败的原因)
if ! python -c "from quantclass_sync_internal import cli; import webview; import pandas"; then
echo "错误:依赖安装失败,请检查网络连接或手动执行:"
echo " pip install -r requirements.txt"
echo ""
echo "按任意键退出..."
read -n 1
exit 1
fi
echo "依赖安装完成。"
echo ""
fi
echo "启动 QuantClass Sync GUI..."
echo ""
python quantclass_sync.py gui
EXIT_CODE=$?
if [ $EXIT_CODE -ne 0 ]; then
echo ""
echo "程序异常退出,按任意键关闭..."
read -n 1
exit $EXIT_CODE
fi
# 仅正常退出时自动关闭本终端窗口(按名称匹配,不误关其他窗口)
osascript -e 'tell application "Terminal" to close (every window whose name contains "QuantClass Sync")' &>/dev/null &