chore: manage env with uv (pyproject + lockfile)
Migrate dependency management from requirements.txt to uv. Runtime deps move to pyproject.toml with pytest in the dev group; uv.lock pins the resolved set. Docs updated to use `uv sync` / `uv run`. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
@@ -6,19 +6,23 @@ A modular Chinese A-share quant research framework. Daily frequency only (Phase
|
||||
|
||||
## Commands
|
||||
|
||||
The env is managed with **uv**. `uv sync` creates `.venv` from `pyproject.toml` + `uv.lock`; `uv run <cmd>` runs inside it (no manual activation needed).
|
||||
|
||||
```bash
|
||||
pip install -r requirements.txt # install deps
|
||||
python3 -m pytest tests/ -v # all tests
|
||||
python3 -m pytest tests/test_alpha.py -v # single file (test_alpha is network-free)
|
||||
python3 -m pytest tests/test_alpha.py::test_evaluate_alpha_keys -v # single test
|
||||
uv sync # create/refresh .venv from the lockfile (incl. dev group)
|
||||
uv run python -m pytest tests/ -v # all tests
|
||||
uv run python -m pytest tests/test_alpha.py -v # single file (test_alpha is network-free)
|
||||
uv run python -m pytest tests/test_alpha.py::test_evaluate_alpha_keys -v # single test
|
||||
|
||||
# Pipeline — each phase is independent: reads parquet, writes parquet.
|
||||
python3 cli.py data download --universe csi500 --start-date 2017-01-01 # → data/daily_bars/csi500/ (month-partitioned)
|
||||
python3 cli.py alpha reversal --data-path data/daily_bars/<universe> # --data-path is the dataset DIR
|
||||
python3 cli.py alpha eval --alpha-path alphas/<file>.pq --data-path data/daily_bars/<universe>
|
||||
python3 cli.py combo combine --alpha-paths a.pq,b.pq --combo-name eq --method equal_weight
|
||||
uv run python cli.py data download --universe csi500 --start-date 2017-01-01 # → data/daily_bars/csi500/ (month-partitioned)
|
||||
uv run python cli.py alpha reversal --data-path data/daily_bars/<universe> # --data-path is the dataset DIR
|
||||
uv run python cli.py alpha eval --alpha-path alphas/<file>.pq --data-path data/daily_bars/<universe>
|
||||
uv run python cli.py combo combine --alpha-paths a.pq,b.pq --combo-name eq --method equal_weight
|
||||
```
|
||||
|
||||
Add a runtime dep with `uv add <pkg>`, a dev/test dep with `uv add --dev <pkg>` (both update `pyproject.toml` + `uv.lock`).
|
||||
|
||||
Note: `tests/test_downloader.py` hits the network (live baostock/akshare); `tests/test_alpha.py` is pure and fast.
|
||||
|
||||
## Architecture: one decoupled pipeline
|
||||
@@ -57,9 +61,9 @@ Each alpha is a class subclassing `BaseAlpha` (`pipeline/alpha/base.py`), living
|
||||
- **External alphas** (authored outside this repo) are the point of the design: write a `@register_alpha class MyAlpha(BaseAlpha)` in any `.py` file, then register it at runtime with `--alpha-module path/to/file.py` (or a dotted module path). See `examples/alphas/mean_reversion.py` for a working example, and `tests/test_alpha.py::test_load_external_alpha_module`.
|
||||
|
||||
```bash
|
||||
python3 cli.py alpha list # registered alpha types
|
||||
python3 cli.py alpha list --alpha-module my_alpha.py # incl. an external one
|
||||
python3 cli.py alpha compute --alpha-module my_alpha.py \
|
||||
uv run python cli.py alpha list # registered alpha types
|
||||
uv run python cli.py alpha list --alpha-module my_alpha.py # incl. an external one
|
||||
uv run python cli.py alpha compute --alpha-module my_alpha.py \
|
||||
--alpha-type my_alpha --alpha-name run1 --param decay=0.9 --data-path <data>.pq
|
||||
```
|
||||
|
||||
|
||||
Reference in New Issue
Block a user