包与维护线

pandas-ta-classic 与原作者版本有什么区别:包名、导入名与迁移清单

这是当前最容易混淆、而中文资料几乎没讲清的一件事:包名、导入名、维护线是三件独立的事。本节把三个同名分发并列对照,给出可复查的状态时间线与一份先比对后切换的迁移清单。

核验日期 2026-10-10PyPI 元数据直读本机 pip list 实测
pandas-ta:原仓库 404
pandas-ta-classic:社区维护 · MIT
pandas-ta-openbb:本机另一个分发
导入名各不相同
依据 PyPI 元数据与本机 pip list 实测绘制的包与维护线示意;非官方关系图。原仓库已不可见,其谱系细节无法复核。
对照总表

这两条维护线到底差在哪?

这是本站被问得最集中的问题。答案不是「哪个更好」,而是它们本来就是两个不同的分发包,各自有独立的包名、导入名、版本线与许可。下表逐项对照。

对照项pandas-tapandas-ta-classic判断要点
PyPI 分发名pandas-tapandas-ta-classicpip 安装写哪个名字,就装哪个包
导入名pandas_tapandas_ta_classic迁移时必须改 import,改包名不等于改导入名
PyPI 上可见版本数2 个(0.4.67b0、0.4.71b0)13 个(0.3.14b1 → 0.8.32)版本数量差异本身就是维护强度的信号
最新版本与日期0.4.71b0(2025-09-14)0.8.32(2026-09-14)两者相差近一年,且版本号体系完全不同
包内分类目录命名单数 candle复数 candles目录名不同意味着内部结构已分叉
Python 版本要求>=3.12>=3.10这一条直接决定你装得上哪一个
依赖约束硬钉 numba==0.61.2numba 为可选硬钉意味着不能自由升级 numba
许可当前公开来源无法复核MIT原仓库不可见,许可证据缺失要如实写
仓库状态404452 Star / 1,464 commits / 48 contributors署名与责任主体不同
注意点元数据里的 Repository 与 Documentation 仍指向失效地址导入名带 _classic 后缀,容易写错两边都需要独立核验
本站的结论只有这一句:如果你在意「和原作者发布的版本保持一致」,要先确认你能接受哪个 Python 版本区间;如果在意「还能持续拿到修复」,请自行评估社区分支的维护现状。本站不为任何一方背书。
状态时间线

原仓库是什么时候开始访问不到的?

下表把本站能直接观测到的事实按时间排列。凡不能从公开来源直接读到的(例如下架的具体原因),本站不做推断,宁可留空。

时间事件来源与可复查性
2024-06 前后社区分支所基于的上游代码时间点(据公开资料)第三方描述,标注为未一手核验
2025-09-03PyPI pandas-ta 发布 0.4.67b0PyPI 元数据,可复查
2025-09-14PyPI pandas-ta 发布 0.4.71b0(当前最新)PyPI 元数据,可复查
2025-06-17社区分支仓库创建GitHub API,可复查
2025-08 起社区分支开始连续发版(0.3.14b1 → 0.8.32)PyPI 元数据,可复查
2026-10-02社区分支最后一次推送GitHub API,可复查
2026-10-10本站核验日:原仓库页面与 API 均 404;官方文档站不可达本机实测,可复查
第三方资料普遍提到原仓库在 2025 年中前后被作者下架,但本站没有拿到官方公告原文,因此页面只把它写成「社区观察」,不作为事实主张;需要引用时请自行核查一手来源。
内部差异

除了包名,两个包内部还差在哪?

这一节回答「能不能直接换 import 就跑」的问题。答案是:大部分指标同名同参,但目录结构、默认导出与部分行为已分叉,所以迁移必须做完这几项核对。

维度原发行版(0.4.71b0 wheel 实测)classic(0.8.32 实测)迁移时要做什么
wheel 内 .py 文件数182284—
分类子包(单复数)candle、cyclecandles、cycles若有脚本直接按子包路径 import,必须改
根模块core / custom / ma / maps / _typing另有 _meta / _indicator_loader 等内部模块不要依赖内部模块名(都属于私有实现)
指标装载方式未核验惰性加载(PEP 562 __getattr__)首次访问某指标时才 import,因此首次调用略慢属正常
K 线形态candles 分类下 62 个模块candles 分类目录 67 个文件,但只导出 5 个公开指标形态要统一走 cdl_pattern(name=...)
版本号来源打包时写入setuptools-scm 从 git tag 生成从源码装可能读到异常版本号,见「排障」页
注意点原包本站未能实际安装(3.11 装不上、无 3.12+ 环境)本站全部运行期结论都来自社区分支 0.8.32不要把 classic 的实测读数直接当成原包行为
必须写明的证据边界:上表「原包」一列来自对 PyPI wheel 的离线剖析(看文件结构与 METADATA),不是运行结果——本机没有能装上它的 Python 版本。classic 一列才是运行期实测。
迁移步骤

已经用了旧包,怎么迁到新包?

按下面的顺序做,每一步都给出可执行的检查方式。核心思路是:先让旧代码跑起来,再逐项核对输出,不要一次性替换后直接上生产。

  1. 记录现状 先记下当前包名与版本:pip show <包名> 与 python -c "import pandas_ta as ta; print(ta.version)",并保存一份现有指标输出作为对照基线。
  2. 安装新包并保持旧输出可比 在同一环境里装上社区分支。两个包可以并存(导入名不同),因此可以先并列比较再切换。
  3. 改导入名 把 import pandas_ta as ta 改成 import pandas_ta_classic as ta;若有 from pandas_ta import ... 的写法要一并改。执行一次 python -c "import pandas_ta_classic as ta; print(ta.version)" 确认成功。
  4. 核对列名与默认参数 用同一份数据分别打印两种实现的输出列名。重点核对三项容易变的默认值:sma/ema 默认 length=10、bbands 默认 length=5、supertrend 默认 7/3.0。列名不一致时,下游的取列代码要同步改。
  5. 核对 K 线形态调用方式 把直接调用单个 cdl_* 的写法统一改成 df.ta.cdl_pattern(name="engulfing") 这种入口,并确认返回列名形如 CDL_ENGULFING。
  6. 回归对比并留痕 对同一段时间、同一批标的,比较迁移前后的指标序列。记录:包名+版本、Python 版本、对比区间、最大绝对差、判定阈值。差异超过你自己设的阈值就不要上线。
若你无法同时保留两个包(例如依赖锁定),第 2 步可以改成在独立虚拟环境里跑一次对照,把两边的输出导成 CSV 再比较。
身份识别

怎么判断装到的是哪一个包?

「import 成功」不足以证明身份。下面四条判据按可靠性从高到低排列,前两条基本可以定案。

判据命令预期结果可靠性
分发包名与版本pip show pandas-ta-classicName 与 Version 直接给答案最高:来自 dist-info 元数据
模块文件路径python -c "import pandas_ta_classic as t; print(t.__file__)"路径位于 site-packages\pandas_ta_classic\最高:直接看到文件位置
启动横幅import 时打印classic 会打印版本与 Total Indicators & Utilities: 255较高:可读但不适合脚本解析
包内分类字典from pandas_ta_classic._meta import Category; print({k: len(v) for k, v in Category.items()})9 个分类合计 193高,但属于内部模块,升级可能变
注意点不要只看 import pandas_ta 是否成功本机实测:pandas-ta-openbb 同样提供 pandas_ta 模块—
如果 ta.version 读到的是 0.0.0 这类明显不对的值,通常说明包是从源码装的、且缺少 git 版本信息。处置见「排障」页。
FAQ

pandas-ta-classic 常见问题:是不是同一个包、能不能并存、迁移要注意什么

下面的回答都指向可核验的官方文件或本站实测;与官方表述冲突时,以官方仓库与文档为准。

pandas-ta-classic 是不是就是原项目换了个名字?

不是。它是独立的 PyPI 分发包,包名、导入名、维护者账号都不同,许可为 MIT。本站能确认的只有这些可直接复查的元数据;两者之间的代码谱系细节,因为原仓库已不可访问,无法一手核验。

两个包能装在同一台机器上吗?

可以并存,因为导入名不同(pandas_ta 与 pandas_ta_classic)。但要注意:本机实测里 pandas-ta-openbb 也会提供 pandas_ta 这个导入名,所以「谁能 import」不能用来判断装了谁。

迁移时必须改哪些代码?

至少四处:①import 语句;②直接按分类子包路径导入的代码(candle → candles);③依赖默认参数的取列代码(sma 默认 10、bbands 默认 5);④单独调用 cdl_* 的写法。完整清单见本页迁移步骤。

迁移后指标数值会变吗?

可能变。本站能提供的确定性结论是:在 classic 0.8.32 上,SMA、EMA、RSI、BBANDS、ATR、OBV、ADX、STOCH 与 TA-Lib 0.8.1 的最大绝对差为 0,MACD 为 0.18。原包本身本站未能运行,因此不做「迁移前后一致」的承诺。

原包的许可还能用吗?

PyPI 元数据里没有 license 字段,仓库又已不可见,本站无法复核原包的许可。如果你需要许可结论用于商用或分发,请自行溯源;本站不替你下结论。

要不要把两个包都装进同一个环境做对照?

可以,因为导入名不同(pandas_ta 与 pandas_ta_classic)不会互相覆盖。本站的建议是:在独立虚拟环境里同时装上,用同一份数据跑一遍同样的指标,把两边输出导成 CSV 比较。比较时至少对齐三件事——数据区间、参数、复权口径。

多久复查一次仓库状态合适?

仓库状态与版本会变化。本站的建议是:在依赖某个包做长期项目时,把「包名 + 版本 + 来源 URL」写进项目文档,每次升级前重新核验一次。

下一步:怎么把版本区间对上?

对照表确认了身份之后,安装矩阵会告诉你不同 Python 版本分别该执行哪条命令,以及装完怎么验证。