DEBUG.WIKI
OnlineSIM:在线接收短信,虚拟号码租用
Evoxt;最高 6.0GHz CPU;高频云服务器 · 免费每周备份;查看配置 →
阿里云;从建站到云上业务;云服务器 · 数据库 · 对象存储;查看产品 →

导入 scipy.stats.sampling 报 SeedlessSequence 缺失,核对 NumPy 2.4.0

SciPy 1.16.3 的部分 wheel 配合 NumPy 2.4.0,可能在导入 sampling 时查找已删除的 Cython 类型。说明 NumPy 2.4.1 正式兼容修正。

刚更新 NumPy,import scipy.stats.sampling 就报 module 'numpy.random.bit_generator' has no attribute 'SeedlessSequence'。错误并不是让你把随机数种子改成另一种类型;它发生在 SciPy 编译扩展加载阶段,业务代码还没有开始采样。

已知组合包含 SciPy 1.16.3 的 wheel、NumPy 2.4.0 和 Python 3.14.2。旧 NumPy 的 Cython 声明中留有 SeedlessSequence,即使扩展没有直接使用它,编译产物仍可能在导入时要求这个类型。2.4.0 删除声明后,按旧声明构建的二进制包便可能加载失败。

NumPy 2.4.1 已恢复这项兼容声明

NumPy 2.4.1 的正式修正保留 SeedlessSequence 这项历史拼写,以便使用随机数 Cython API、按 2.4.0 之前版本构建的 wheel 继续运行。对于符合项目其他依赖约束的环境,应通过原有依赖管理方式使用包含该修正的正式版本,再重建实际运行环境。

这里的名字属于兼容层,不是应用应该采用的新随机 API。不要给 numpy.random.bit_generator 手工挂一个同名占位类,也不要把它指向 SeedSequence。Cython 扩展还依赖类型布局,Python 层一个相似名字不能保证二进制兼容。

编译时和运行时的 NumPy 都需要留证

同样的 SciPy 版本号,官方 wheel、系统发行包和本地源码构建可能采用不同构建依赖。源码重建恰好成功,并不能证明原 wheel 没问题;只在一个终端查看版本,也不能覆盖 Notebook 内核或服务使用的环境。

保留失败环境的 Python、NumPy、SciPy 版本及安装来源,再核对锁文件、wheel 来源和实际解释器路径。若包管理器混用造成旧文件残留,应按原环境管理流程重建干净环境,不能在多个 site-packages 之间手工复制 .so 或 .pyd。

不能立即采用兼容修正版时,恢复一套原先可用、依赖约束一致的锁定组合,比只替换一个随机模块更可控。恢复也应覆盖整个环境,而不是在活跃进程里覆盖已加载的扩展文件。

验收要实际加载采样扩展

单独 import scipy 成功不够,它不一定加载本次出错的子模块。应在新的进程中通过原先的导入入口,再验证项目实际使用的采样器初始化和固定种子下的基本输出约束。已有运行进程可能仍持有旧扩展,更新磁盘文件之后需要按应用流程重启。

若新异常已经变成其他二进制符号或动态库错误,应按新的完整堆栈继续定位。此处修正限定于 NumPy 2.4.0 移除历史 Cython 类型造成的兼容问题,不解释所有 SciPy 导入失败。