.PHONY: all build run test clean help # 变量 BINARY_NAME=market-data-service SYNC_BINARY=market-data-sync DOCKER_IMAGE=market-data-service:latest # Python项目路径 PYTHON_DIR=python_market_data_service VENV_PATH=$(PYTHON_DIR)/venv PYTHON_BIN=$(VENV_PATH)/bin/python # Windows下使用不同的路径 ifeq ($(OS),Windows_NT) PYTHON_BIN=$(VENV_PATH)/Scripts/python endif # 默认目标 all: build # ==================== Go 命令 ==================== # 构建服务 build: go build -o bin/$(BINARY_NAME) ./cmd/server # 构建同步工具 build-sync: go build -o bin/$(SYNC_BINARY) ./cmd/sync # 构建全部 build-all: build build-sync # 运行服务(Go) run: go run ./cmd/server # 运行同步工具 - 同步股票列表 sync-stocks: go run ./cmd/sync -type stocks # 运行同步工具 - 同步期货列表 sync-futures: go run ./cmd/sync -type futures # 运行同步工具 - 同步交易日历 sync-calendar: go run ./cmd/sync -type calendar -start 20240101 -end 20241231 # 运行同步工具 - 同步K线数据 sync-klines: go run ./cmd/sync -type klines -symbol 000001.SZ -start 20240301 -end 20240307 -freq 1d # Go测试 test: go test -v ./... # 下载Go依赖 deps: go mod download go mod tidy # ==================== Python 命令 ==================== # 创建Python虚拟环境 py-venv: cd $(PYTHON_DIR) && python -m venv venv @echo "虚拟环境已创建,请激活:" @echo " Windows: $(PYTHON_DIR)\venv\Scripts\activate" @echo " Linux/Mac: source $(PYTHON_DIR)/venv/bin/activate" # 安装Python依赖 py-deps: $(PYTHON_BIN) -m pip install --upgrade pip $(PYTHON_BIN) -m pip install -r $(PYTHON_DIR)/requirements.txt $(PYTHON_BIN) -m pip install tushare # 运行Python服务(开发模式) py-run: cd $(PYTHON_DIR) && $(PYTHON_BIN) -m app.main # 运行Python服务(Uvicorn,热重载) py-run-uvicorn: cd $(PYTHON_DIR) && $(PYTHON_BIN) -m uvicorn app.main:app --reload --port 8080 # 运行Python服务(生产模式) py-run-prod: cd $(PYTHON_DIR) && $(PYTHON_BIN) -m uvicorn app.main:app --host 0.0.0.0 --port 8080 --workers 4 # Python数据同步 - 股票 py-sync-stocks: cd $(PYTHON_DIR) && $(PYTHON_BIN) scripts/sync_data.py --type stocks # Python数据同步 - 期货 py-sync-futures: cd $(PYTHON_DIR) && $(PYTHON_BIN) scripts/sync_data.py --type futures # Python数据同步 - 交易日历 py-sync-calendar: cd $(PYTHON_DIR) && $(PYTHON_BIN) scripts/sync_data.py --type calendar --start 20240101 --end 20241231 # Python数据同步 - K线 py-sync-klines: cd $(PYTHON_DIR) && $(PYTHON_BIN) scripts/sync_data.py --type klines --symbol 000001.SZ --start 20240301 --end 20240307 --freq 1d # Python测试 py-test: cd $(PYTHON_DIR) && $(PYTHON_BIN) -m pytest tests/ -v # Python代码格式化 py-fmt: cd $(PYTHON_DIR) && $(PYTHON_BIN) -m black app/ --line-length 100 # Python类型检查 py-lint: cd $(PYTHON_DIR) && $(PYTHON_BIN) -m mypy app/ --ignore-missing-imports # ==================== 数据库命令 ==================== # 初始化数据库(Go方式,使用SQL脚本) db-init: psql $(DATABASE_URL) -f memory/2026-03-07-database-schema.sql # 初始化数据库(Python方式,使用SQLAlchemy) db-init-py: cd $(PYTHON_DIR) && $(PYTHON_BIN) -c "from app.repositories.database import init_db; init_db()" # ==================== Docker 命令 ==================== # Docker构建(Go版本) docker-build: docker build -t $(DOCKER_IMAGE) . # Docker构建(Python版本) docker-build-py: docker build -t $(DOCKER_IMAGE)-python -f $(PYTHON_DIR)/Dockerfile $(PYTHON_DIR) # Docker运行 docker-run: docker run -d -p 8080:8080 --name market-data $(DOCKER_IMAGE) # ==================== 其他命令 ==================== # 格式化Go代码 fmt: go fmt ./... # Go代码检查 lint: golangci-lint run # 清理构建产物 clean: rm -rf bin/ rm -rf $(PYTHON_DIR)/__pycache__ rm -rf $(PYTHON_DIR)/app/__pycache__ find $(PYTHON_DIR) -type d -name __pycache__ -exec rm -rf {} + 2>/dev/null || true # 查看帮助 help: @echo "╔════════════════════════════════════════════════════════════════╗" @echo "║ 统一行情数据服务 - Makefile 命令帮助 ║" @echo "╚════════════════════════════════════════════════════════════════╝" @echo "" @echo "【Go 命令】" @echo " make build - 构建 Go 服务二进制文件" @echo " make build-sync - 构建 Go 数据同步工具" @echo " make build-all - 构建所有 Go 二进制文件" @echo " make run - 运行 Go 服务(开发模式)" @echo " make deps - 下载 Go 依赖" @echo " make test - 运行 Go 测试" @echo "" @echo "【Python 命令】" @echo " make py-venv - 创建 Python 虚拟环境" @echo " make py-deps - 安装 Python 依赖" @echo " make py-run - 运行 Python 服务(直接)" @echo " make py-run-uvicorn - 运行 Python 服务(Uvicorn热重载)" @echo " make py-run-prod - 运行 Python 服务(生产模式)" @echo " make py-test - 运行 Python 测试" @echo "" @echo "【数据同步 - Go】" @echo " make sync-stocks - 同步股票列表" @echo " make sync-futures - 同步期货列表" @echo " make sync-calendar - 同步交易日历" @echo " make sync-klines - 同步K线数据" @echo "" @echo "【数据同步 - Python】" @echo " make py-sync-stocks - 同步股票列表" @echo " make py-sync-futures - 同步期货列表" @echo " make py-sync-calendar - 同步交易日历" @echo " make py-sync-klines - 同步K线数据" @echo "" @echo "【数据库】" @echo " make db-init - 初始化数据库(Go SQL脚本)" @echo " make db-init-py - 初始化数据库(Python SQLAlchemy)" @echo "" @echo "【Docker】" @echo " make docker-build - 构建 Docker 镜像(Go)" @echo " make docker-build-py - 构建 Docker 镜像(Python)" @echo "" @echo "【其他】" @echo " make clean - 清理构建产物" @echo " make fmt - 格式化 Go 代码" @echo " make py-fmt - 格式化 Python 代码(black)" @echo " make help - 显示本帮助" @echo "" @echo "【快速开始】" @echo " 1. Go实现: make deps && make run" @echo " 2. Python实现: make py-venv && make py-deps && make py-run-uvicorn"