源码方式
克隆官方仓库后把包目录放进项目路径即可使用,适合要跟最新提交或想读实现细节的人。它不解决依赖问题,pandas 仍需自己装好,升级也要自己拉取更新。适合需要改实现、跟最新字段的人,不适合只想稳定取数的人。
Installation
本库是纯 Python 包,安装本身通常只要一条 pip 命令。真正的坑集中在三处:装到了哪个解释器、依赖版本对不对、以及装完能不能真的取到数据。下面按这三层展开,每一层都给可直接复制的命令与自检方法。
事实核验卡(核验日期 2026-09-29)
以上数字来自本站 2026-09-29 在 Windows + Python 3.11.9 + financedatabase 2.4.0 下的真实运行输出,不是从文章里转抄的;数据文件由上游持续更新,行数会变,以官方 PyPI 与 GitHub Release 为准。采集时 GitHub star 约 9,374(2026-09-29)。
官方 README 与 PyPI 都把 pip 作为主要安装方式。但真实环境千差万别:同一台机器可能装了多个 Python、可能有公司代理、可能要求可复现的版本锁定。下面这张表按「你的实际情况」逐行给命令与注意点,而不是只给一条通用命令。
| 你的情况 | 建议命令 | 说明 | 适用场景 | 注意点 |
|---|---|---|---|---|
| 首次安装 | pip install financedatabase | 从 PyPI 拉取发布版(实测 2.4.0),并连带解析出 35 个包 | 全新环境,只想先跑通一次查询 | 确认 pip 与后续运行的 python 来自同一个解释器 |
| 已有旧版要升级 | pip install -U financedatabase | 升级到 PyPI 上的最新发布 | 怀疑字段或数据比旧版旧 | 升级后要重启进程,正在运行的解释器仍用旧版本 |
| 不确定装没装上 | python -c "import financedatabase as fd; print(fd.__version__)" | 能打印版本即导入成功 | 排查「是不是没装上」 | 版本号以 PyPI 发布页为准,不以本文为准 |
| 用 conda 管理环境 | 先 conda activate 环境名,再用 pip 安装本库 | conda 环境下仍建议用 pip 装本库 | 数据科学/notebook 环境 | pip 与 conda 混用最容易装到另一个环境 |
| 国内网络慢或超时 | 配置 pip 镜像或代理后重试 | 先解决「包拉不下来」,本地代码无问题 | 公司内网、境外源不稳定 | 镜像的同步频率与 PyPI 可能有差异 |
| 要让环境可复现 | 安装时用 == 指定版本号 | 锁定版本写进 requirements.txt | 团队协作、定时脚本 | 具体版本号以 PyPI 发布页为准 |
| 只在某个项目里用 | 先建虚拟环境再安装 | 不污染全局解释器 | 多个项目依赖不同 pandas 版本 | 每开一个新终端都要重新激活环境 |
| 内网机器装不了 | 先在有网机器上把包与依赖下载下来,再拷进内网安装 | 受管网络的常见做法 | 服务器没有外网出口 | 下载与安装的解释器、操作系统要一致,否则拿过去也装不上 |
| 不想装任何环境 | 改用免部署的对话式技能路线 | 不开本地环境,直接在客户端里提问 | 只想先看到数据结果,不打算维护工程 | 两条路线能力边界不同,见功能特性与许可边界 |
本库的依赖面很窄,这是优点也是边界:它只负责把证券清单取回来,行情、财务数据都不在它的职责范围内。因此环境准备的重点不在「装多少东西」,而在「把解释器、依赖与网络出口这三件事对齐」——这三件里任何一件不对,外在表现都是同一个:「装好了却用不了」。
| 依赖项 | 作用 | 不满足时的表现 | 适用场景 | 注意点 |
|---|---|---|---|---|
| Python | 运行环境 | 版本过低时安装或导入直接失败 | 全新机器 | 具体最低版本以 PyPI 页面的 Requires 字段为准 |
| pandas | 把证券清单组织成 DataFrame 返回 | 缺 pandas 时导入报错;版本冲突时表现为报错或行为异常 | 任何查询场景 | pandas 大版本差异会直接影响下游代码写法 |
| pip | 安装与升级 | pip 过旧可能拉不到最新发布 | 安装/升级 | 用 pip -V 确认 pip 属于哪个解释器 |
| 虚拟环境 | 隔离依赖 | 不隔离时容易和别的项目抢 pandas 版本 | 多项目共存 | venv 与 conda 选一个即可,别混用 |
| 可用的网络出口 | 拉取上游证券清单 | 导入正常,但查询返回空或长时间无响应 | 首次查询 | 「导入成功」不等于「数据可取得」,这是本页的第二个重点 |
| 多个 Python 共存 | 决定 pip 会把包装进哪一个 | 装了却导入不到,或导入到的是另一个环境里的旧版 | 机器上同时有商店版与官网版 | 用 python -m pip 显式绑定解释器,不要裸用 pip |
| 系统编码与时区 | 影响输出的可读性与时间类字段的解释 | 终端中文显示为乱码;时间字段按 UTC 理解导致偏差 | 结果要落盘或要做时间对齐 | 乱码多是终端编码问题,不一定是数据本身有问题 |
| 磁盘与内存 | 存放与处理证券清单 | 数据量大时内存紧张 | 一次性拉全量再筛选 | 先按条件筛选再取全量,能明显减少内存占用 |
| 行情数据源(可选) | 补上价格类数据 | 只有代码和元数据,没有价格 | 需要做回测或画图 | 本库不提供行情,需另接数据源,见证券类别与数据来源 |
每一步都给「命令 + 为什么 + 预期看到什么」。这个顺序不是凑数:从解释器到环境、到安装、再到取数,先确认内层再确认外层,出错时就能一眼定位到具体环节;反过来做,很容易在错误的方向上反复重装。
python -V 与 pip -V,两条输出里的 Python 路径应当指向同一个环境。为什么要先做这步:绝大多数「装了却 import 不到」都源于两个命令其实属于不同解释器。预期输出:两条命令都打印出版本号与同一个路径前缀。
python -m venv .venv,随后按系统激活(Windows:.venv\Scripts\activate;macOS/Linux:source .venv/bin/activate)。为什么:把本库与它要用的 pandas 关进一个独立环境,避免和别的项目互相覆盖。预期输出:命令行提示符前出现环境名。
pip install financedatabase。为什么:从官方发布渠道取包,同时自动解析 pandas 依赖。预期输出:出现 Successfully installed 字样,并列出被安装的包名。
python -c "import financedatabase"。为什么:把「装上了」和「能导入」分开确认。预期输出:无任何输出即为成功;出现 ModuleNotFoundError 说明第 1 步或第 2 步没对齐。
在已导入本库的会话里执行 fd.Equities().select() 取一类证券列表,观察返回是否非空。为什么:导入成功只说明代码在,不说明上游数据通。预期输出:返回一个 DataFrame,行数大于 0。
pip freeze > requirements.txt。为什么:把当下这套可用的版本组合固定下来,换机器时能复现同样行为。预期输出:生成一个包含本库与 pandas 等依赖及版本号的文本文件。换机器时按这份文件重装,才能复现同一套行为。
这一节官方安装说明里没有,但它能挡掉最多的一类「明明装好了却什么都没有」的困惑。顺序是从内到外:先查环境,再查网络,最后查数据本身。每一行都写了明确的正常表现,对不上就是问题所在,不需要凭感觉猜。
| 顺序 | 查什么 | 怎么查 | 正常表现 | 异常表现与下一步 |
|---|---|---|---|---|
| 1 | 解释器是否一致 | 对比 python -V 与 pip -V 的路径 | 两条路径前缀相同 | 路径不同 → 用 python -m pip install financedatabase 明确指定解释器 |
| 2 | 能否导入 | python -c "import financedatabase" | 无报错、无输出 | 报 ModuleNotFoundError → 回到第 1 步 |
| 3 | 依赖是否就位 | python -c "import pandas; print(pandas.__version__)" | 打印出版本号 | 报错或版本异常 → 先升级/固定 pandas |
| 4 | 运行环境是否联网 | 用一个最轻的请求确认出口可用 | 请求能返回 | 超时 → 检查代理、防火墙、公司网关 |
| 5 | 上游数据源是否可达 | 直接发起一次证券列表查询 | 秒级到数十秒内返回非空 DataFrame | 长时间无响应 → 多为上游不可达,而非本库故障 |
| 6 | 返回是否为空 | 看返回对象的行数 | 行数 > 0 | 行数 = 0 → 先放宽筛选条件,再判断是否上游缺数据 |
| 7 | 字段是否够用 | 打印返回的列名 | 存在代码、名称、国家/行业等元数据列 | 列名与预期不符 → 以官方最新返回为准,不要按旧教程硬写列名 |
| 8 | 是否误当行情源 | 检查有没有价格类字段 | 本库不提供价格 | 需要价格 → 另接行情源,这是设计边界不是缺陷 |
| 9 | 输出能不能直接用 | 把查询结果写一个小文件看一眼 | 中文正常、字段整齐、行数符合预期 | 乱码 → 写文件时显式指定 utf-8;列错位 → 回到第 7 步核对列名 |
下面这些是本库安装阶段最常见的场景。注意区分「装不上」和「装上了取不到数」——两者处理方式完全不同:前者是本地环境问题,改解释器或依赖就能解决;后者通常出在网络这一层,改本地配置往往无效。先归类再动手,能省下大量试错时间。表格最后一列写的是「怎么确认修好了」,避免把「看起来不报错了」当成已经修好。
| 现象 | 常见原因 | 处理建议 | 怎么确认修好了 |
|---|---|---|---|
| ModuleNotFoundError: No module named 'financedatabase' | 没装,或装到了另一个解释器 | 用 python -m pip install financedatabase 指定当前解释器安装 | 再跑一次导入命令,无输出即通过 |
| 命令在终端能跑,在 Jupyter 里却 import 不到 | Notebook 内核与终端不是同一个环境 | 切换到装了本库的那个内核,或在 Notebook 内直接安装 | 在 Notebook 里打印解释器路径核对 |
| pandas 版本冲突报错 | 项目里已有另一套 pandas 约束 | 新建独立虚拟环境,或按 PyPI 的依赖约束调整 pandas | 导入与一次查询都能跑通 |
| 安装过程卡在下载 | 网络出口受限或源不稳定 | 配置代理或镜像后重试 | 出现 Successfully installed |
| 升级后行为没变化 | 旧的 Python 进程/内核仍在运行 | 完全退出进程后重开 | 打印版本号确认已是新版 |
| 导入正常,查询返回空 | 上游数据源不可达,或筛选条件过窄 | 先放宽条件试一次,再确认网络出口 | 宽条件能返回非空结果 |
| 终端里能跑,定时任务里失败 | 定时任务的环境变量与交互终端不同(代理、PATH、是否激活) | 在脚本里显式指定解释器与环境,不要依赖「已激活」这个前提 | 手动跑同一条命令能通过,即视为修好 |
| 查询很慢 | 一次性取全量再筛选 | 先按条件筛选,减少返回行数 | 同一查询耗时明显下降 |
除 pip 外还有源码方式,另外两条容易混淆的事要在这里说清:升级不是必须,配合行情源才是常态。三件事放在一起看就会发现,长期真正需要维护的其实只有一件——版本与数据源的对齐。
克隆官方仓库后把包目录放进项目路径即可使用,适合要跟最新提交或想读实现细节的人。它不解决依赖问题,pandas 仍需自己装好,升级也要自己拉取更新。适合需要改实现、跟最新字段的人,不适合只想稳定取数的人。
升级能拿到更新的证券清单与字段,但也可能让旧脚本里写死的列名失效。生产脚本建议先锁版本,在另一个环境验证后再切,不要直接在生产环境升级。
本库只给代码与元数据,价格要另接数据源。常见分工是:这里拿代码,行情源拿价格,两边用代码字段对齐;代码口径不一致是这一步最常见的失败原因——不同行情源对交易所后缀、大小写、存托凭证的处理并不统一,建议先用几只你熟悉的标的做一次小范围对账,再批量处理。
命令基本一致,卡住的地方往往不一样。下表把差异按「卡在哪」整理出来,避免照着别的系统教程反复试——尤其在 Windows 上,多个 Python 共存导致的解释器错配是最常见的一类问题。
| 环境 | 最容易卡住的地方 | 建议做法 | 适用场景 | 注意点 |
|---|---|---|---|---|
| Windows | 多个 Python 共存,python 与 pip 指向不同版本 | 用启动器 py -3 -m pip 明确指定要装进哪个 Python | 本机装了商店版与官网版两个 Python | 激活脚本与 macOS/Linux 不同,路径分隔符也不同 |
| macOS | 系统自带 Python 权限受限 | 装独立版本并建虚拟环境,不要改动系统解释器 | 开发机 | 系统 Python 下安装容易被权限拦住 |
| Linux | 发行版包管理器与 pip 混用 | 统一走虚拟环境,避免系统级安装 | 服务器、容器 | 部分发行版对系统级 pip 安装有额外限制 |
| Docker / 容器 | 镜像内无网络或出口受限 | 构建期安装依赖,运行期只跑查询 | 定时任务 | 运行期再去拉包会放大失败概率 |
| 国内网络 | 拉包慢、上游数据源偶发不可达 | 先配镜像解决拉包,再单独确认上游可达性 | 本地开发 | 这两件事要分开排查,不要混为一谈 |
| 代理环境 | pip 与运行时程序走的出口不一致 | 分别配置 pip 代理与运行时网络出口 | 公司内网 | 能装不代表能查,反之亦然 |
| 无外网的内网机器 | 装包与取数两件事都不可达 | 先解决包怎么分发进去,再单独确认数据出口 | 受管服务器 | 这两件事走的往往不是同一条链路,不要指望一起解决 |
| Jupyter / Notebook | 内核环境与终端环境不是同一个 | 把环境注册为内核后再打开 Notebook | 研究分析 | 终端装成功、Notebook 导入失败是典型症状 |
安装是手段不是目的。先确认你要的是「证券清单」还是「价格行情」,这会直接决定这条路适不适合你。下面把常见需求逐条拆开:能直接用它的给做法,不该用的明确写出什么时候该换路线。
| 你的需求 | 推荐路线 | 理由 | 什么时候该换路线 |
|---|---|---|---|
| 批量拿证券代码与元数据 | 安装本库 | 这正是它的定位,返回 DataFrame 便于二次处理 | 不需要代码清单时,用它反而多一层 |
| 需要价格、成交量、财务指标 | 本库 + 行情源 | 本库只负责清单,价格必须另接 | 只需要几只股票的行情时,直接行情源更省事 |
| 想先把问题问清楚,再决定是否建工程 | 先用对话式技能路线试一次 | 不开环境即可看到结构化结果,用来验证需求是否真实 | 要长期复用、要写进流水线时,还是得自建 |
| 要做回测或策略研究 | 本库 + 回测框架 | 本库提供标的池,回测框架负责撮合与绩效 | 回测框架自带数据时,清单环节可省 |
| 只做一次性的小样本查询 | 不装,直接用现成工具 | 一次性需求不值得维护环境与依赖 | 开始周期性使用时再补环境 |
| 只想先核实一个想法 | 先用对话式路线问一次 | 拿到结构化结果就能判断想法是否成立 | 需要长期复用、要写进流水线时再回来自建 |
| 要在受管服务器上运行 | 容器内构建,锁版本 | 可复现优先于最新 | 环境无法联网时,需先解决构建期网络 |
这些误解官方文档通常不会专门指出,因为对熟悉 Python 生态的人来说它们显而易见;但对刚接触这个库的人,每一条都可能耗掉一两个小时。把它们前置说清,比事后排查便宜得多。
| 想当然 | 实际情况 | 正确理解 | 什么时候不影响你 |
|---|---|---|---|
| 装上就能查行情价格 | 本库只提供代码与元数据 | 价格必须另接行情数据源,这是设计定位而非缺陷 | 你只需要一份可直接用的标的清单时 |
| import 成功就等于装好了 | 导入只验证代码在,不验证数据可达 | 还要跑一次真实查询,确认返回非空 | 你的环境已经确认过上游可达 |
| 包名和仓库名可以互换着写 | 安装要用 PyPI 上的包名,GitHub 上的是仓库名 | 两者指同一个项目,但安装命令必须用包名 | 只在浏览器里查资料时无所谓 |
| 必须用 conda 才能装 | pip 才是官方主要方式 | venv 或 conda 都能用,选一个并保持一致即可 | — |
| 升级总是更好 | 新版可能调整字段,旧脚本可能失效 | 先锁版本、在独立环境验证,再切到生产 | 脚本里没有硬编码列名时 |
| 数据是实时更新的 | 清单与元数据有自己的更新节奏,部分字段可能滞后 | 对时效敏感的字段要自己确认更新情况,不要默认最新 | 只做长期标的池筛选时 |
| 报错一定是库的问题 | 多数报错来自解释器、依赖版本或网络出口 | 按本页自检清单从第 1 步逐层排查 | — |
| 必须先读完整英文文档才能上手 | 安装与初期几类查询只需要几个固定函数 | 先跑通三类调用,再按需回头查文档细节 | 你要改实现或提交贡献时 |
本库在自己的 pyproject.toml 里只声明了一个直接依赖,但解析下来会连带装上一整条链。下表是 2026-09-29 在干净 venv 里执行 pip install financedatabase 的实际结果(Python 3.11.9 / Windows)。
| 包 | 实测装到的版本 | 由谁引入 | 你要注意什么 |
|---|---|---|---|
financedatabase | 2.4.0 | 你直接安装 | 包本身只有 34 KB,真正的内容是运行时下载的数据文件 |
financetoolkit | 2.2.0 | 本库声明的直接依赖只有一个 | 装本库等于把整个 FinanceToolkit 装上;to_toolkit() 靠它工作 |
pandas | 3.0.6 | financetoolkit 要求 pandas>=3.0 | 与你环境里已有的 pandas 2.x 会冲突,务必用虚拟环境 |
numpy | 2.4.6 | pandas 3.0 要求 | 老代码若依赖 numpy 1.x ABI 需要注意 |
scikit-learn | 1.9.1 | financetoolkit | 带来 scipy 1.17.1、joblib、threadpoolctl 等一串 |
yfinance | 1.7.0 | financetoolkit | 免 key 的行情与基本面走这条链 |
openpyxl | 3.1.5 | financetoolkit | 只用于 Excel 读写 |
python -m venv .venv 隔离,否则很可能把你已有的数据环境顶坏。这个包不在 wheel 里带数据。每次初始化一个类,代码都会去 raw.githubusercontent.com 拉对应的 .bz2;下面是从本节 2026-09-29 的实测记录里摘出的文件体积与耗时。
| 数据文件 | 实测体积 | 下载耗时 | 覆盖内容 |
|---|---|---|---|
equities.bz2 | 14.9 MB | 13.8 秒 | 112,718 行股票清单与元数据 |
etfs.bz2 | 1.3 MB | 1.8 秒 | 36,481 行 ETF |
funds.bz2 | 1.8 MB | 2.8 秒 | 57,853 行基金 |
indices.bz2 | 1.2 MB | 2.0 秒 | 91,181 行指数 |
currencies.bz2 | 45 KB | 0.7 秒 | 2,556 行货币/货币对 |
cryptos.bz2 | 32 KB | 0.8 秒 | 3,367 行加密货币 |
moneymarkets.bz2 | 20 KB | 0.9 秒 | 1,367 行货币市场工具 |
ValueError: Failed to load data from .../equities.bz2: HTTPSConnectionPool(...): Failed to establish a new connection: [WinError 10061] 由于目标计算机积极拒绝,无法连接。. Ensure you are able to access the file. It is possible it fails due to a firewall or other security settings. Sometimes Google Colab is also the culprit.requests 类的报错。包在 use_local_location=True 时,会去读 site-packages/compression/ 目录。把这个目录建好、把七个 .bz2 放进去,加载耗时从 16.6 秒降到 2.9 秒(同机实测)。
实测发现:use_local_location=True 时传入的 base_url 参数不生效,代码固定去读 site-packages/compression/。想换目录要改包内路径,不能靠这个参数。
连续两次 fd.Equities(),若第二次明显变快且断网也能跑通,说明缓存目录生效了。
安装要用 PyPI 上的全小写包名 financedatabase;GitHub 上的是它的大驼峰仓库名,两者指同一个项目,查资料时两个名字都值得搜。以官方 PyPI 页面与仓库 README 为准。
官方要求在 PyPI 的 Requires 字段中给出,会随发布时间调整,本页不复述具体数字。实践上建议使用仍在维护期内的 Python 版本,并配合虚拟环境使用,避免与系统解释器互相影响。以官方 PyPI 页面为准。
核心依赖是 pandas,依赖面较窄。装不上通常不是本库本身的问题,而是解释器不一致、pandas 版本冲突或网络出口受限这三类。按本页自检清单从第 1 步往下走,基本都能定位到具体环节。先分清是环境问题还是数据问题,比反复重装有效率得多。以官方 README 与 PyPI 为准。
不能。本库提供证券代码与元数据,不提供价格类数据,这是设计定位而不是安装缺陷。需要价格时要另接行情数据源,再用代码字段把两边对齐。以官方说明与仓库 README 为准。
无已证实集成。本库需通过 pip 自行安装;本机已核验的金融数据技能路线是另一条独立路线,走的是免部署取数,两者的前置条件与能力边界不同,不能互相替代。以官方仓库说明为准。
有可能。新版可能调整列名或字段口径,写死列名的脚本容易失效。建议先在独立环境验证,再切到生产使用;用 requirements.txt 锁版本是可复现的前提。具体变更以官方仓库的发布说明为准。