迁移决策 · 按任务分流

investpy 用不了怎么办:按任务分流的迁移与替代选型

「换成什么」这个问题没法一句话回答,因为 investpy 覆盖的任务跨度很大:从枚举资产名录到取历史行情、从技术指标到经济日历。正确的做法是先拆任务,再选工具。这一页给出一张按任务分流的对照表,并逐项说明前置条件。

依据:PyPI 元数据 + 本机技能目录清点清点时间:2026-10-1229 个本机技能不含实盘建议

按任务分流

只要名录investpy 离线名录仍可用
要历史行情按市场选 yfinance / AkShare 等
要 A 股行情AkShare / Tushare(需 Token)
要成图与报告专用绘图与绩效工具
按任务分流的迁移示意,依据 PyPI 元数据与本机技能目录清点整理。分流标准是「你要完成什么任务」,而不是「哪个工具更有名」。
Route by task

先拆任务,再选工具

同一句「investpy 用不了」,背后可能是五种完全不同的需求。下表按任务给出对应路线。

你的任务investpy 现在能否完成推荐路线前置条件
枚举某国/某类的资产代码能(离线名录)继续用 investpy 的 get_*s_list无
取海外股票历史行情不能(403)换用免 Key 的海外行情库需确认目标市场的代码格式
取 A 股历史行情不能(403)AkShare / Tushare Pro / BaostockTushare 需 Token;其余大多免 Key
取加密货币行情不能(403)交易所公开接口或专用库注意各家限流策略不同
算技术指标不能(403)本地指标库自算需自行处理复权与缺失值
查经济日历不能(403)改用官方统计机构或财经日历数据源注意时区参数格式
不想写代码,直接出结论不适用走本机免部署技能路线部分技能需自备 Key / 授权

别忽略第一行:很多人的实际需求只是「拿到一份资产代码清单」。这部分 investpy 今天仍然能用,迁移成本为零。先确认你的任务属于哪一类,再决定要不要换。

investiny

作者推荐的 investiny:能力对照与依赖陷阱

官方 README 明确建议「先用 investiny」。它是不是合适的替代,要看功能映射和你环境的依赖情况。

需求investpyinvestiny注意点
资产搜索search_quotessearch_assets返回结构不同:对象 vs 结构化结果
历史数据每类资产一个函数historical_data 统一入口参数形态不同,迁移需改调用代码
返回格式pandas DataFrame以 JSON 风格的结构为主下游要自己转 DataFrame
技术指标有专门函数功能较少需要指标就要另找库
经济日历有专门函数功能较少同上
当前稳定性本机实测 403本站未实测官方也强调是「临时方案」,不构成长期保证

依赖陷阱(来自 PyPI 元数据,非猜测):investiny 最新版 0.7.2(2022-10-18 上传)把依赖钉死在 httpx>=0.23.0,<0.24.0 与 pydantic>=1.10.2,<2.0.0,并要求 Python >=3.8,<4.0。这意味着它会强制把 httpx 与 pydantic 降到你环境里的旧版本,如果项目里还有别的库依赖 pydantic 2.x,就会出现冲突。装之前请先建隔离环境。

Alternatives

其他数据源怎么选:前置条件比对

下面只列前置条件与适用场景,不评价「哪个更好」——数据源的适用性取决于你的市场、精度要求与是否愿意申请 Key。

方案前置条件典型适用场景注意点
AkSharepip 安装,多数接口免 KeyA 股与国内多品种数据、宏观数据接口随上游页面变化,需关注版本
Tushare Pro注册并申请 Token,部分接口有积分门槛结构化行情与财报数据先确认你要的接口在权限范围内
Baostockpip 安装,免 KeyA 股历史行情与复权数据覆盖与更新频率需自行验证
yfinance 类海外库pip 安装,免 Key美股与部分海外标的限流与接口稳定性随上游变化
交易所 / 券商 API账户或机构权限对时效与准确性要求高的生产场景接入成本最高,数据最权威
本机免部署技能路线安装客户端后调用本机技能,部分需自备 Key不写代码完成取数、分析、出图具体授权状态以你本机为准

所有第三方数据源都存在接口变更风险。区别在于:有的项目更新频繁、能跟上上游变化;有的已经停止更新,就只能等。选型时把「最近一次发布时间」当成一项硬指标会更稳妥。

Migrate

迁移到新数据源的五步流程

迁移最容易出错的地方不是接口调用,而是口径与代码体系的变化。按下面五步走可以把风险压到最低。

  1. 冻结现有产物

    把已经用 investpy 生成的数据与脚本打包备份,记录版本与采集时间。预期:出现问题时可回滚对比。

  2. 做一张字段映射表

    列出你实际用到的列(如 Date/Open/High/Low/Close/Volume/Currency),逐个对应到新数据源的字段名。预期:得到一份一一对应的映射清单,避免「以为同名就是同义」。

  3. 抽样对账

    挑 3–5 个标的、各取一段区间,把两边数据按日期对齐后比对收盘价与成交量。预期:差异应能解释(复权口径、币种、单位)。解释不了的差异就是风险点。

  4. 重建口径与约束

    把复权、交易日历、涨跌停与 T+1 等约束在取数脚本里显式建模。预期:换数据源后回测参数不必重调,结论仍可复现。

  5. 更新文档与依赖锁

    把新数据源、版本、Key 的存放方式写进项目文档并锁依赖。预期:下一个人接手时不需要重新摸索。

迁移时最容易漏掉的一步是把旧数据的口径一起带过去。如果旧产出没有记录复权方式与成交量单位,换源之后你连「结果为什么变了」都答不上来。因此第 1 步的核心不是备份文件,而是备份「这份数据当初是怎么产生的」。

迁移阶段容易漏的动作后果
冻结旧产物只备份数据文件,没记口径无法解释换源后的差异
字段映射按列名对齐,未核对语义同名不同义,静默出错
抽样对账只比收盘价,不比成交量单位差异被忽略
重建口径沿用旧脚本默认值复权与交易日历不一致
更新文档不锁版本换台机器结果就不同

另外提醒一点:investpy 的离线名录如果需要继续使用,可以在迁移后保留为一个独立步骤,只负责枚举代码,行情部分交给新数据源。这种方式不会干扰新链路,但要在文档里写清 investpy 与新数据源各自的职责边界。

Decision

三个问题决定你怎么选

不必比较功能清单,回答三个问题基本就能定下来。

问题如果答案是「是」如果答案是「否」
你只是需要资产代码清单吗?继续用 investpy 的离线名录,不需要迁移进入下一个问题
你的数据主要来自 A 股吗?优先考虑 AkShare / Baostock;要结构化财务再考虑 Tushare优先考虑免 Key 的海外行情库
你愿意维护 Key 与配额吗?可以选需要 Token 的规范接口,稳定性通常更好选免 Key 方案,但接受接口随上游变化的可能
你需要复现他人的结论吗?固定数据源 + 固定版本 + 记录采集时间可以更灵活,但仍需记录来源
你不写代码吗?直接看本机技能路线按上面三步选库

FAQ

investpy 常见问题:还能装吗、还能取数吗、换什么

investpy 用不了,作者的 investiny 该不该先换?
不一定先换,但值得先评估。官方 README 明确建议「暂时用 investiny」,说明它在功能上最接近;不过本站没有实测它的可用性,且它的 PyPI 元数据把依赖钉在 httpx<0.24、pydantic<2,与当前主流环境可能存在冲突。建议先建隔离环境试装,再决定是否迁移。
迁移到新数据源需要改多少代码?
主要改三块:函数调用(每类资产的函数名不同)、字段映射(列名不一定一致)、以及口径处理(复权、单位、时区)。本站建议先做一张字段映射表再动手,能避免「以为同名就是同义」这类隐性错误。具体工作量取决于你的代码耦合程度。
能不能继续用 investpy 的一些部分、只替换行情?
可以,而且这是本站推荐的务实做法。名录类函数(get_*s_list、get_*_countries)离线可用,行情类函数走别的数据源,两者在同一份脚本里共存没有技术障碍。只需要在文档里写清哪部分走哪个源。
换数据源后回测结果变了,是不是新数据源有问题?
不一定,先做抽样对账。结果差异通常来自四类原因:复权口径不同、成交量单位不同、交易日历不同、以及样本区间边界不同。按本页第 3 步把两边数据按日期对齐比对,能解释的差异属正常,解释不了的才需要进一步查。具体以各数据源的官方说明为准。
选择数据源时最该看什么指标?
建议优先看两项:最近一次发布时间(判断项目是否还在跟进上游变化)与接口文档的口径说明(是否明确复权、单位与时区)。前者决定「会不会突然坏掉」,后者决定「坏掉时你能不能自己修」。
EasyClaw 的技能路线和自建脚本冲突吗?
不冲突,它们是两种交付方式。自建脚本适合需要版本控制、批量处理与可复现性研究的场景;技能路线适合不写代码、希望快速得到结论与图表的场景。investpy 与本机技能之间没有已证实集成,两者是并列选项,详见对比页。

如果不写代码,有没有更省事的路?

有。EasyClaw 的本机技能路线把取数、分析、出图都做成自然语言任务,但部分技能需要自备 Key 或授权。对比页给出两条路线的前置成本与边界对照。