ci(windows): 实测 akshare 可行性,推翻「硬阻塞点」假设
## 假设被推翻
迁移计划曾把 akshare 的 py_mini_racer(62MB V8 预编译)列为「唯一硬阻塞点」,
理由是 Windows + cp312 是否有 wheel 未验证。
2026-10-26 用 uv 做离线解析(无需 Windows 机器):
uv pip install --python-platform windows --python-version 3.12 --dry-run akshare
→ 解析成功,mini-racer==0.14.1,与本机 macOS 上的版本完全一致
→ pandas/numpy 仅小版本差异(3.1.0/2.5.4 vs 本机 3.0.3/2.4.6)
## 但「能装」不等于「能跑」
V8 原生库在 win32 上能否真正加载并执行 JS 必须实测。故选在观察期的
windows job 里加三步实测(各自 continue-on-error,避免装不上时中断后续步骤):
1. 安装 akshare
2. 验证 py_mini_racer 可执行 JS(ctx.eval('1+1') == 2)
3. 跑 Services/akshare_fetcher/tests
## 一个必须写死的命名陷阱
PyPI 包名是 mini-racer,但**顶层模块名仍是 py_mini_racer**
(akshare 源码里全是 import py_mini_racer)。写成 import mini_racer 会
ModuleNotFoundError,从而误判为「Windows 装不上」。
本机已验证正确写法:import py_mini_racer → ctx.eval('1+1') == 2,
akshare 1.18.64 及其依赖 mini-racer 的模块均可正常导入。
首次 CI 反馈后:若三步全绿,可去掉 continue-on-error,并考虑把 tushare
一并纳入 Windows 范围。
This commit is contained in:
1 parent
649085ab3b
commit
21606708d0
1 file changed
+31
@@ -204,3 +204,34 @@ jobs:
|
||||
|
||||
- name: SDK 测试
|
||||
run: python -m pytest Services/findatahub-client/tests -q
|
||||
|
||||
# ── akshare 可行性实测 ──────────────────────────────────
|
||||
#
|
||||
# 迁移计划曾把 akshare 的 py_mini_racer(62MB V8 预编译)列为「唯一硬阻塞点」,
|
||||
# 理由是"Windows 上是否有 cp312 wheel 未验证"。
|
||||
#
|
||||
# 2026-10-26 用 uv 做离线解析,结论是**可以**:
|
||||
# uv pip install --python-platform windows --python-version 3.12 --dry-run akshare
|
||||
# → 解析成功,其中 mini-racer==0.14.1,与本机 macOS 上的版本完全一致
|
||||
# (pandas/numpy 仅小版本差异:CI 3.1.0/2.5.4 vs 本机 3.0.3/2.4.6)
|
||||
#
|
||||
# 但"能装"不等于"能跑"——V8 二进制在 win32 上能否真正加载需要实测。
|
||||
# 下面两步就是这次实测。各自 continue-on-error,避免装不上时中断后续步骤;
|
||||
# 整个 job 本身也在观察期,失败不阻塞合并。
|
||||
- name: 安装 akshare(Windows 可行性实测)
|
||||
continue-on-error: true
|
||||
run: python -m pip install --quiet akshare
|
||||
|
||||
- name: 验证 mini-racer 原生库可加载
|
||||
# 注意包名与模块名不一致:PyPI 包叫 mini-racer,**顶层模块仍是 py_mini_racer**
|
||||
# (akshare 源码里也全是 import py_mini_racer / from py_mini_racer import MiniRacer)。
|
||||
# 写成 import mini_racer 会 ModuleNotFoundError 而误判为"Windows 装不上"。
|
||||
continue-on-error: true
|
||||
run: >-
|
||||
python -c "import py_mini_racer;
|
||||
ctx = py_mini_racer.MiniRacer();
|
||||
print('py_mini_racer 可执行 JS:', ctx.eval('1+1'))"
|
||||
|
||||
- name: akshare 采集器测试
|
||||
continue-on-error: true
|
||||
run: python -m pytest Services/akshare_fetcher/tests -q
|
||||
Reference in new issue
Block a user