迁移决策 · 按任务分流
investpy 用不了怎么办:按任务分流的迁移与替代选型
「换成什么」这个问题没法一句话回答,因为 investpy 覆盖的任务跨度很大:从枚举资产名录到取历史行情、从技术指标到经济日历。正确的做法是先拆任务,再选工具。这一页给出一张按任务分流的对照表,并逐项说明前置条件。
按任务分流
先拆任务,再选工具
同一句「investpy 用不了」,背后可能是五种完全不同的需求。下表按任务给出对应路线。
| 你的任务 | investpy 现在能否完成 | 推荐路线 | 前置条件 |
|---|---|---|---|
| 枚举某国/某类的资产代码 | 能(离线名录) | 继续用 investpy 的 get_*s_list | 无 |
| 取海外股票历史行情 | 不能(403) | 换用免 Key 的海外行情库 | 需确认目标市场的代码格式 |
| 取 A 股历史行情 | 不能(403) | AkShare / Tushare Pro / Baostock | Tushare 需 Token;其余大多免 Key |
| 取加密货币行情 | 不能(403) | 交易所公开接口或专用库 | 注意各家限流策略不同 |
| 算技术指标 | 不能(403) | 本地指标库自算 | 需自行处理复权与缺失值 |
| 查经济日历 | 不能(403) | 改用官方统计机构或财经日历数据源 | 注意时区参数格式 |
| 不想写代码,直接出结论 | 不适用 | 走本机免部署技能路线 | 部分技能需自备 Key / 授权 |
别忽略第一行:很多人的实际需求只是「拿到一份资产代码清单」。这部分 investpy 今天仍然能用,迁移成本为零。先确认你的任务属于哪一类,再决定要不要换。
作者推荐的 investiny:能力对照与依赖陷阱
官方 README 明确建议「先用 investiny」。它是不是合适的替代,要看功能映射和你环境的依赖情况。
| 需求 | investpy | investiny | 注意点 |
|---|---|---|---|
| 资产搜索 | search_quotes | search_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,就会出现冲突。装之前请先建隔离环境。
其他数据源怎么选:前置条件比对
下面只列前置条件与适用场景,不评价「哪个更好」——数据源的适用性取决于你的市场、精度要求与是否愿意申请 Key。
| 方案 | 前置条件 | 典型适用场景 | 注意点 |
|---|---|---|---|
| AkShare | pip 安装,多数接口免 Key | A 股与国内多品种数据、宏观数据 | 接口随上游页面变化,需关注版本 |
| Tushare Pro | 注册并申请 Token,部分接口有积分门槛 | 结构化行情与财报数据 | 先确认你要的接口在权限范围内 |
| Baostock | pip 安装,免 Key | A 股历史行情与复权数据 | 覆盖与更新频率需自行验证 |
| yfinance 类海外库 | pip 安装,免 Key | 美股与部分海外标的 | 限流与接口稳定性随上游变化 |
| 交易所 / 券商 API | 账户或机构权限 | 对时效与准确性要求高的生产场景 | 接入成本最高,数据最权威 |
| 本机免部署技能路线 | 安装客户端后调用本机技能,部分需自备 Key | 不写代码完成取数、分析、出图 | 具体授权状态以你本机为准 |
所有第三方数据源都存在接口变更风险。区别在于:有的项目更新频繁、能跟上上游变化;有的已经停止更新,就只能等。选型时把「最近一次发布时间」当成一项硬指标会更稳妥。
迁移到新数据源的五步流程
迁移最容易出错的地方不是接口调用,而是口径与代码体系的变化。按下面五步走可以把风险压到最低。
冻结现有产物
把已经用 investpy 生成的数据与脚本打包备份,记录版本与采集时间。预期:出现问题时可回滚对比。
做一张字段映射表
列出你实际用到的列(如 Date/Open/High/Low/Close/Volume/Currency),逐个对应到新数据源的字段名。预期:得到一份一一对应的映射清单,避免「以为同名就是同义」。
抽样对账
挑 3–5 个标的、各取一段区间,把两边数据按日期对齐后比对收盘价与成交量。预期:差异应能解释(复权口径、币种、单位)。解释不了的差异就是风险点。
重建口径与约束
把复权、交易日历、涨跌停与 T+1 等约束在取数脚本里显式建模。预期:换数据源后回测参数不必重调,结论仍可复现。
更新文档与依赖锁
把新数据源、版本、Key 的存放方式写进项目文档并锁依赖。预期:下一个人接手时不需要重新摸索。
迁移时最容易漏掉的一步是把旧数据的口径一起带过去。如果旧产出没有记录复权方式与成交量单位,换源之后你连「结果为什么变了」都答不上来。因此第 1 步的核心不是备份文件,而是备份「这份数据当初是怎么产生的」。
| 迁移阶段 | 容易漏的动作 | 后果 |
|---|---|---|
| 冻结旧产物 | 只备份数据文件,没记口径 | 无法解释换源后的差异 |
| 字段映射 | 按列名对齐,未核对语义 | 同名不同义,静默出错 |
| 抽样对账 | 只比收盘价,不比成交量 | 单位差异被忽略 |
| 重建口径 | 沿用旧脚本默认值 | 复权与交易日历不一致 |
| 更新文档 | 不锁版本 | 换台机器结果就不同 |
另外提醒一点:investpy 的离线名录如果需要继续使用,可以在迁移后保留为一个独立步骤,只负责枚举代码,行情部分交给新数据源。这种方式不会干扰新链路,但要在文档里写清 investpy 与新数据源各自的职责边界。
三个问题决定你怎么选
不必比较功能清单,回答三个问题基本就能定下来。
| 问题 | 如果答案是「是」 | 如果答案是「否」 |
|---|---|---|
| 你只是需要资产代码清单吗? | 继续用 investpy 的离线名录,不需要迁移 | 进入下一个问题 |
| 你的数据主要来自 A 股吗? | 优先考虑 AkShare / Baostock;要结构化财务再考虑 Tushare | 优先考虑免 Key 的海外行情库 |
| 你愿意维护 Key 与配额吗? | 可以选需要 Token 的规范接口,稳定性通常更好 | 选免 Key 方案,但接受接口随上游变化的可能 |
| 你需要复现他人的结论吗? | 固定数据源 + 固定版本 + 记录采集时间 | 可以更灵活,但仍需记录来源 |
| 你不写代码吗? | 直接看本机技能路线 | 按上面三步选库 |
FAQ
investpy 常见问题:还能装吗、还能取数吗、换什么
investpy 用不了,作者的 investiny 该不该先换?
httpx<0.24、pydantic<2,与当前主流环境可能存在冲突。建议先建隔离环境试装,再决定是否迁移。迁移到新数据源需要改多少代码?
能不能继续用 investpy 的一些部分、只替换行情?
get_*s_list、get_*_countries)离线可用,行情类函数走别的数据源,两者在同一份脚本里共存没有技术障碍。只需要在文档里写清哪部分走哪个源。