StockSight 报错怎么查?八条常见报错按关键词定位
左列是你在终端里能看到的那一行,右列是你应该采取的方向。
| 报错里的关键词 | 所属层 | 根因 | 下一步 |
|---|---|---|---|
metadata-generation-failed + bdist_wheel | 依赖安装 | venv 里没有 wheel,而某个依赖只有源码包 | 单独执行一次 pip install wheel,不要和别的包写在同一行 |
metadata-generation-failed + import feedfinder2 | 依赖安装 | feedfinder2 0.0.4(2016)的 setup.py 在安装自己时先 import 自己 | 跳过 newspaper3k,或 pip install --no-deps newspaper3k |
lxml.html.clean | 依赖导入 | lxml 把 HTML 清理模块拆成独立包 | pip install lxml_html_clean |
cannot import name 'StreamListener' | 代码兼容 | tweepy 4.x 移除了该接口 | pip install "tweepy<4",或改代码迁到 StreamingClient |
No module named 'config' | 配置 | 仓库只提供 config.py.sample | cp config.py.sample config.py |
No module named 'core'(C 路线 14 个模块一起报) | 测试命令 | unittest discover -s tests 没把仓库根加进 sys.path | 加 -t .:discover -s tests -t . |
No module named 'pandas'(B 路线测试) | 测试依赖 | requirements.txt 不含 pandas,但测试文件在顶部 import 了它 | pip install pandas(CI 配置里也是这么装的) |
405 METHOD NOT ALLOWED(POST 到 text-processing.com) | 外部服务 | 该项目的外挂情感服务在本网络下不接受 POST | 不要用 --websentiment;或在自己的网络下单独验证 |
速查表只给方向。每一类的完整报错原文、触发命令与判断依据在下面的分节里。
老版 StockSight 安装失败在哪四层?为什么是串联的
这四层是顺序出现的——修好第一层才会看到第二层。
| 层 | 修它需要做什么 | 修完会看到什么 | 注意点 |
|---|---|---|---|
| 1 | 单独装 wheel;把 newspaper3k 摘出来单独处理 | 其余七个包安装成功(exit 0) | wheel 与目标包写在同一个 pip 命令里无效 |
| 2 | pip install lxml_html_clean | newspaper 可能可以导入,但未做全功能验证 | 该包 2018 年后未更新,长期可用性未知 |
| 3 | pip install "tweepy<4" | StreamListener / TweepError / Stream 三个导入成功 | 本机验证 3.10.0 可用;仍需有效的 API 凭据 |
| 4 | cp config.py.sample config.py | --help 能打印出参数说明 | 还要把 ES 地址等填对,否则会在连接阶段失败 |
完整的前置条件与可行顺序见「安装与运行」页。这里只回答「看到这条报错该怎么办」。
StockSight 新闻情绪 Skill 的文档命令为什么跑不通
这个仓库的主流程可跑,但 README 给的两条命令都需要补一步。
| 问题 | 为什么会出现 | 正确做法 |
|---|---|---|
| 测试收集阶段失败 | requirements.txt 只列了 4 个运行时依赖,不含 pandas;测试文件在模块顶部 import 了它 | 照 .github/workflows/ci.yml 装:pip install pytest pandas |
| sentiment 命令返回中性,看起来「没生效」 | 不是报错,是模型边界:VADER 与 TextBlob 对财经术语会返回 0 | 换 backend,或接受该结果并记录(详见情绪模型页) |
| permission / 许可不确定性 | 仓库无 LICENSE 文件,README 写 MIT、SKILL.md 写 Apache 2.0 | 商用前向作者确认,不要自行选一个 |
这个仓库的 CI 配置写得比 README 更准确——它明确装了 pytest pandas。遇到「文档说能跑但实际跑不了」时,先看项目自己的 CI 配置,这是最少被修饰的信息源。
StockSight 异动分析 Skill 的测试命令为什么缺参数
这个仓库依赖最少、跑得最顺,唯一的坑在测试命令上。
| 问题 | 根因 | 修正 | 验证标准 |
|---|---|---|---|
| 14 个测试模块全部导入失败 | -s tests 只会把 tests/ 加进 sys.path,仓库根不在其中,因此 import core 失败 | 加 -t . 指定顶层目录为仓库根 | 输出 Ran 160 tests ... OK |
| 快照报告里出现空表 | 不是报错,是渲染问题:表头被输出但无数据行 | 暂无官方修正;接入时自行校验表格是否为空 | 「最终判断」与「关注维度」应显式提示数据缺失 |
成交额显示为 RMB 389,400,000万 | 单位换算逻辑问题 | 接入前先校验数值量纲 | 成交额应为合理量级 |
Ran 14 tests 与 Ran 160 tests 的差别:前一次不是「14 个测试失败」,而是「14 个测试文件都加载不了」。读 unittest 输出时要区分「Ran N」里的 N 是文件数还是用例数。有哪些不是报错、但一样会卡住的外部因素
它们不会给你 Traceback,只是「没数据」或「连不上」。
| 因素 | 本机观测 | 表现 | 怎么排查 |
|---|---|---|---|
| 外挂情感服务 | POST http://text-processing.com/api/sentiment/ 返回 HTTP 405 | 启用 --websentiment 时拿不到结果,情绪回落到中性 | 先手动 POST 一次看状态码;405 说明该请求方式不被接受 |
| Twitter 相关文档站 | TLS 握手超时 | 无法按 README 的链接申请凭据 | 换网络环境或在浏览器里访问确认;本站未验证凭据可用性 |
| 新闻源网页结构 | 页面可访问(HTTP 200) | 但源码用 i.next.next.next.next 取值,页面改版即取不到内容且不报错 | 检查脚本是否打印出标题;没有就是抓取失效 |
| 行情接口 | 本机返回 200、976 条 2 分钟线 | 本次可用 | 该地址非公开文档接口,参数或返回结构可能变化 |
news headlines: N, filtered: M, filter-ratio),这是它值得保留的设计。遇到没见过的报错应该怎么排查
这套顺序对三个仓库都适用,也能推广到其它 Python 项目。
先看报错指向哪一个文件哪一行
StockSight 的所有异常都能直接定位到行:
sentiment.py 第 27 行、stockprice.py 第 23 行、feedfinder2 setup.py 第 15 行。行号比报错文本更能说明问题。分清是「没装」还是「装了但接口变了」
ModuleNotFoundError属于前者,ImportError: cannot import name ...属于后者。前者的解法是装包,后者多半要降级或改代码。去项目自己的 CI 配置里找正确命令
B 路线的 README 漏了 pandas,但
ci.yml里写了;C 路线的 README 漏了-t .。CI 文件是「作者实际跑过」的命令,可信度高于 README。确认是不是「静默失败」
没有报错、没有数据,通常是抓取选择器失效或过滤条件把数据全丢了。看计数日志,或者临时把过滤条件放宽再跑一次。
把环境和版本记下来
几乎所有这类报错都与 Python 版本、pip 版本、依赖解析结果相关。本页全部结论都基于 Windows / Python 3.11.9 / pip 24.0,你的结果可能不同。记录版本是复现的前提。
关于 StockSight 报错排查的常见问题有哪些
为什么我按教程装,一次就成功了?
可能的原因有三个:你用的是几年前的 Python 版本(例如 3.6/3.7),此时 pip 会解析到旧版依赖;你的环境里已经装过 wheel 与部分依赖;或者教程本身就省略了前置步骤。本站的四层失败链是在全新隔离虚拟环境里从零开始跑出来的,以你自己的环境为准。
把 tweepy 降级会不会影响其它项目?
会,如果装在全局环境里。tweepy<4 与使用 4.x 的其它项目不能共存于同一环境。建议为 StockSight 单独建虚拟环境,以 Python 官方 venv 文档为准。这也是本站实测全程使用独立 venv 的原因。
newspaper3k 到底能不能修好?
本机把它单独安装(--no-deps)成功了,但 import newspaper 仍因 lxml.html.clean 报错;按提示补装 lxml_html_clean 后本机未做进一步验证。考虑到该包最新版是 2018 年发布的,长期方案建议换用仍在维护的正文抽取库。以 PyPI 上该包的发布记录为准。
「Ran 14 tests」到底是 14 个用例还是 14 个错误?
在这个例子里,是 14 个测试文件全部加载失败(每个文件算 1 个错误),不是 14 个用例跑挂了。区分方法:看 FAILED (errors=14) 里的 errors 与 Ran 14 tests 是否相同,以及错误堆栈是不是清一色的 ModuleNotFoundError——如果是,通常就是路径问题而不是逻辑问题。
没有报错但程序不产出数据,怎么办?
按顺序查四件事:①抓取到的原始条数是否为 0(选择器失效);②过滤后条数是否为 0(白名单门槛太严,StockSight 老版的默认白名单只围绕 Tesla);③情绪判定是否为全中性(模型的边界问题,不是数据问题);④写入是否失败(ES 未启动)。StockSight 老版会打印抓取/过滤计数,优先用这个日志。
本页的报错会不会随版本变化失效?
会。这些报错是 2026-09-30 在特定版本组合下复现的,依赖升级、包被修复或仓库更新都可能改变结果。因此每条都写了触发命令与判断关键词,你可以自己重新验证。以你运行时的实际输出为准。