安装与环境 · 含失败原文
investpy 怎么装成功:pip 报 bdist_wheel 的原因与修复命令
官方 README 只给了一行 pip install investpy。在新版 pip 上,这行命令会直接失败——不是网络问题,也不是权限问题,而是 PyPI 上只有源码包、没有 wheel。本站把失败原文、根因和实测可用的修复命令完整记录下来。
三条安装路径
两条可验证的安装路径对照
左列是官方给出的路径,右列是本站实测的结果与替代做法。表格里的每一条命令都可以直接复制执行。
| 路径 | 命令 | 本机实测结果 | 适用场景 / 注意点 |
|---|---|---|---|
| 官方推荐 | pip install investpy | 失败:invalid command 'bdist_wheel' | README 原文写法;pip ≥23 的隔离构建环境不再预置 wheel |
| 本站验证可用 | pip install setuptools wheel 后 pip install investpy --no-build-isolation | 成功,装出 版本 1.0.8 | 适合本机快速落地;--no-build-isolation 意味着用当前环境的构建依赖 |
| 官方源码路径 | pip install git+https://github.com/alvarobartt/investpy.git@master | 未实测 | README 称 master「始终可用」,但 master 最后提交停在 2022-10-02 |
| 手动构建 | 下载 sdist 后 python setup.py install | 未实测 | 老式写法,新 setuptools 已不推荐;仅作最后手段 |
| 指定版本 | pip install investpy==1.0.8 --no-build-isolation | 与路径 B 等价 | 需要锁版本时使用;PyPI 上共 50 个历史版本 |
| 离线安装 | 先在可联网机器上构建 wheel 再拷贝 | 未实测 | 内网/隔离环境场景;需自行构建,PyPI 不提供 wheel |
为什么必须加 --no-build-isolation:pip 默认会在一个全新的隔离环境里构建包,而那个环境里没有 wheel,于是 bdist_wheel 这条命令找不到;加上该参数后,pip 改用你当前环境里的 setuptools 和 wheel,构建即可完成。
失败现场:报错原文逐行解读
下面是本机 pip install investpy 的真实输出(节选)。看懂这几行,就能判断自己遇到的是不是同一个问题。
Collecting investpy
Downloading .../investpy-1.0.8.tar.gz (4.4 MB)
Installing build dependencies: started
Installing build dependencies: finished with status 'done'
Preparing metadata (pyproject.toml): started
Preparing metadata (pyproject.toml): finished with status 'error'
error: subprocess-exited-with-error
× Preparing metadata (pyproject.toml) did not run successfully.
│ exit code: 1
╰─> [15 lines of output]
... UserWarning: Usage of dash-separated 'description-file' ...
creating 'investpy-1.0.8.dist-info'
error: invalid command 'bdist_wheel'
note: This error originates from a subprocess, and is likely not a problem with pip.
error: metadata-generation-failed
| 输出行 | 它在说什么 | 你要关注的点 |
|---|---|---|
Downloading investpy-1.0.8.tar.gz | pip 只找到源码包(sdist),没有 wheel | 没有 wheel 就一定要本地构建,这是后面所有问题的起点 |
Installing build dependencies … done | 隔离构建环境已就绪 | 这一步成功不代表构建能成功,它只装构建所需的最小依赖 |
Preparing metadata (pyproject.toml) | pip 试图生成包元数据 | 该库是老式 setup.py 项目,pip 通过兼容层调用它 |
invalid command 'bdist_wheel' | 构建环境里缺少 wheel 工具 | 这是根因;报错发生在 setuptools 内部子进程 |
metadata-generation-failed | 元数据生成失败,安装终止 | pip 会把根因包在中间,直接看最后两行容易误判为 pip 故障 |
likely not a problem with pip | pip 声明问题不在自身 | 不要因为这句话去重装 pip,方向错了 |
修复步骤:四步装出可用的 investpy
每一步都给出命令与预期输出。预期输出按本机实测结果填写,你的环境可能略有差异。
创建隔离环境
python -m venv venv-investpy,然后激活。预期输出:命令行出现虚拟环境前缀;后续所有命令都在该环境中执行。先补齐构建依赖
pip install setuptools wheel。预期输出:Successfully installed setuptools-… wheel-…。这一步是后面--no-build-isolation能生效的前提。用不隔离的方式安装 investpy
pip install investpy --no-build-isolation。预期输出:Successfully installed investpy-1.0.8 …,同时会解析出 pandas / numpy / requests / lxml 等依赖。验证安装结果
python -c "import investpy;print(investpy.__version__)"。预期输出:1.0.8。此时「装」这件事已经完成——注意,这不等于能取数。
依赖版本不保证:该库的 requirements 只写了 numpy>=1.17.2 与 numpy>=1.21.2(同一行出现两次)且没有上界,因此会解析到当前最新的 numpy 2.x 与 pandas 3.x。本站实测正是在 pandas 3.0.6 / numpy 2.4.6 上完成导入与离线名录调用的,但这不等于所有功能都与新版兼容。
装完之后,实际装到了什么?
「装成功」和「装成了什么」是两件事。下表是修复路径成功后,本机环境里真实落地的东西。
| 检查项 | 本机实测值 | 说明 |
|---|---|---|
| investpy 版本 | 1.0.8 | 与 PyPI 最新版本一致(2022-01-24 上传) |
| 顶层公开名数量 | 102 个 | 含 9 类资产函数组 + 搜索 + 指标 + 日历;search_events 未导出 |
| pandas / numpy | 3.0.6 / 2.4.6 | 项目未设上界,解析到当前最新版 |
| requests / lxml | 2.34.2 / 6.1.3 | 抓取与解析依赖 |
| 离线名录调用 | 成功 | 19 个名录/枚举函数全部返回 |
| 联网取数调用 | 失败(403) | 与本页主题不同,属于可用性问题 |
Python 版本与依赖边界
官方声明与实测可行范围并不一致,这一页把两者都写清楚,避免你用「官方说支持到 3.9」误判。
| 项 | 官方声明 | 本机实测 | 结论 |
|---|---|---|---|
| Python 版本 | python_requires='>=3.7',classifier 只列 3.7/3.8/3.9 | 3.11.9 可装、可 import、离线名录可用 | 未声明支持不等于不能跑,但属未验证范围 |
| CI 覆盖 | GitHub Actions:ubuntu + windows × 3.7/3.8/3.9 | 未复跑 CI | 官方测试覆盖止于 3.9 |
| numpy 上界 | 无上界(且同一文件写了两条 numpy 约束) | 解析到 2.4.6,导入正常 | 存在潜在 ABI 风险,锁版本时需自测 |
| 数据源依赖 | requests / lxml | 新版本下请求仍能发出,只是被 403 拦 | 库侧依赖不是故障原因 |
| 构建依赖 | README 未提及 | 必须显式装 wheel 才能构建 | 官方文档缺项,本页补齐 |
| 可选依赖 | setup.py 提供 tests / docs extras | 未安装 | 仅开发者需要,普通使用者可忽略 |
| 安装期现象 | 可能原因 | 处理方式 |
|---|---|---|
invalid command 'bdist_wheel' | 构建环境缺 wheel | 装 setuptools+wheel 后加 --no-build-isolation |
| 下载超时 / 连接重置 | 网络或镜像问题 | 更换 PyPI 镜像源后重试 |
| numpy 编译相关报错 | 平台无预编译包 | 锁定到有 wheel 的 numpy 版本 |
| pandas 版本冲突 | 与既有环境抢依赖 | 使用独立虚拟环境,不要装进全局 |
| 权限拒绝 | 装到了系统目录 | 改用虚拟环境,避免 --user 与系统混装 |
为什么官方 CI 不能替你保证:仓库的 GitHub Actions 只在 ubuntu 与 windows 的 Python 3.7 / 3.8 / 3.9 上跑测试。这意味着三件事官方**没有**覆盖:更新版本的 Python、经过时间变化后的依赖解析结果、以及现在的 Investing.com 端点状态。三者恰好是今天最容易出问题的部分,因此「本机实测」在这里不是多余步骤。
| 你会看到的问题 | 属于哪一类 | 要不要自己解决 |
|---|---|---|
| 装不上、构建报错 | 打包方式过时 | 要,本页已给可复制的命令 |
| 导入报错、依赖冲突 | 环境与依赖范围 | 要,用隔离环境 + 锁版本 |
| 离线名录报文件缺失 | 安装不完整 | 要,重装并确认解包完整 |
| 联网调用返回 403 | 上游服务端策略 | 不要,改代码无效 |
| 返回 200 但结果为空 | 搜索词或过滤条件 | 要,调整查询参数 |
FAQ
investpy 常见问题:还能装吗、还能取数吗、换什么
investpy 必须用 Python 3.9 以下吗?
python_requires='>=3.7',classifier 与 CI 覆盖 3.7–3.9,这代表「官方测试过的范围」而不是「可用的边界」。本站实测在 Python 3.11.9 上安装、导入与离线名录调用都正常。不过要注意未声明支持的范围官方不做保证,是否长期稳定需你自己的环境验证。不加 --no-build-isolation 有没有别的办法?
--no-build-isolation」这一条路径,其余路径未验证,请以你实测结果为准。装完了 import 报错怎么办?
ModuleNotFoundError: No module named 'investpy' 通常是装到了别的解释器或没激活虚拟环境,用 pip show investpy 看路径;如果报 ERR#0056: stocks file not found,则是包内数据文件缺失,属安装不完整,重装并确认 sdist 解包完整即可。为什么依赖会解析到 pandas 3.x?
pandas>=0.25.1,没有上界,pip 自然选当前最新版。版本 1.0.8 发布于 2022 年,当时的 pandas 还是 1.x,所以「官方测试过的组合」与「今天装出来的组合」并不相同。需要稳定组合时请自行锁版本并做回归测试。在 Windows 上安装有额外步骤吗?
--no-build-isolation。虚拟环境创建、激活命令与 Linux/macOS 不同(Windows 用 venv-investpy\Scripts\activate),其余相同。