-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathrun.py
More file actions
80 lines (61 loc) · 2.61 KB
/
Copy pathrun.py
File metadata and controls
80 lines (61 loc) · 2.61 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
"""
量化投研平台 Web 服务入口(前后端分离版)
用法:
python run.py # 默认 8888 端口
python run.py --port 9000
python run.py --no-stockpool # 不加载股票池
开发模式(前后端分开运行):
终端1: python run.py # Flask 后端,端口 8888
终端2: cd frontend && npm run dev # Vite 前端,端口 5173
生产模式(前端已构建):
cd frontend && npm run build
python run.py # Flask 同时托管前端
"""
import argparse
import os
import sys
from pathlib import Path
# Tushare 等金融 API 直连,不走系统代理(避免 VPN 代理导致超时)
for _proxy_key in ('http_proxy', 'https_proxy', 'HTTP_PROXY', 'HTTPS_PROXY', 'ALL_PROXY', 'all_proxy'):
os.environ.pop(_proxy_key, None)
ROOT = Path(__file__).parent
if str(ROOT) not in sys.path:
sys.path.insert(0, str(ROOT))
from loguru import logger
from api.app import create_app
def _ensure_data_dirs():
"""确保 data/ 下各子目录存在(启动时创建,不在 config 导入时触发)。"""
from config import DATA_DIR, DATA_DIR_CSVS, DATA_DIR_PRJ, DATA_DIR_MODELS
for d in [DATA_DIR, DATA_DIR_CSVS, DATA_DIR_PRJ, DATA_DIR_MODELS]:
d.mkdir(exist_ok=True, parents=True)
def main():
_ensure_data_dirs()
from orm_models.api import init_db
init_db()
parser = argparse.ArgumentParser(description='量化投研平台 Web 服务')
parser.add_argument('--port', type=int, default=8888)
parser.add_argument('--no-stockpool', action='store_true')
args = parser.parse_args()
xlsx_path = None
if not args.no_stockpool:
xlsx_path = str(ROOT / 'stockpool.xlsx')
app = create_app(xlsx_path=xlsx_path, root_path=ROOT)
dist_exists = (ROOT / 'desktop' / 'frontend' / 'dist').exists()
logger.info('─' * 52)
logger.info(f'量化投研平台已启动 → http://localhost:{args.port}')
if dist_exists:
logger.info('模式:生产(Flask 托管前端)')
else:
logger.info('模式:开发(前端请运行 cd desktop && npm run dev)')
logger.info('前端地址 → http://localhost:5173')
logger.info('API 接口:')
logger.info(' GET /api/chart?period={1|2|3}')
logger.info(' GET /api/industry?period={1|2|3}')
logger.info(' GET /api/value/data?year=&metric=')
logger.info(' GET /api/backtest/list')
logger.info(' POST /api/backtest/run')
logger.info('按 Ctrl+C 停止')
logger.info('─' * 52)
app.run(host='0.0.0.0', port=args.port, debug=False, threaded=True)
if __name__ == '__main__':
main()