You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Python实现datetime时NumPy导入失败,报多数组初始化未报告异常

解决CPython 3.6中datetime模块导致NumPy导入失败的问题

我来帮你搞定这个头疼的问题!在CPython 3.6这个版本里,datetime模块的一段清理逻辑确实会和NumPy的初始化产生冲突,我之前帮朋友排查过类似的情况。

问题根源

你提到的datetime模块末尾的那段代码是关键:当成功导入更快的C语言实现_datetime后,它会执行del语句删除所有Python实现里定义的模块级变量(比如_DAYNAMES、_DAYS_BEFORE_MONTH这些)。而NumPy在初始化multiarray的时候,会尝试访问datetime模块里的这些内部变量,结果找不到就抛出了"initialization of multiarray raised unreported exception"这个报错。

具体解决办法

1. 临时应急修复(快速生效)

直接修改Python标准库的datetime模块源码:

  • 找到你Python安装目录下的Lib/datetime.py文件
  • 定位到那段else:后面的del (...)代码块,把整个del块注释掉或者直接删除
  • 保存文件后重新尝试导入NumPy,应该就能正常工作了

注意:修改标准库源码只是临时方案,适合快速测试或者暂时无法升级Python的场景,长期来看还是推荐升级版本。

2. 根本解决方案(推荐)

升级你的Python版本到3.7及以上。Python 3.7对datetime模块的清理逻辑做了调整,不会再删除那些可能被第三方库依赖的内部变量,从根源上解决了这个冲突。

3. 不修改标准库的临时方案(繁琐但可行)

在导入NumPy之前,手动保存datetime模块里会被删除的变量:

import datetime

# 提前保存所有会被删除的变量
datetime._DAYNAMES = datetime._DAYNAMES
datetime._DAYS_BEFORE_MONTH = datetime._DAYS_BEFORE_MONTH
datetime._DAYS_IN_MONTH = datetime._DAYS_IN_MONTH
datetime._DI100Y = datetime._DI100Y
datetime._DI400Y = datetime._DI400Y
datetime._DI4Y = datetime._DI4Y
datetime._EPOCH = datetime._EPOCH
datetime._MAXORDINAL = datetime._MAXORDINAL
datetime._MONTHNAMES = datetime._MONTHNAMES
datetime._build_struct_time = datetime._build_struct_time
datetime._check_date_fields = datetime._check_date_fields
# 把del语句里的所有变量都照这样保存一遍

import numpy

这个办法需要把所有被del的变量都手动保存,比较麻烦,所以更推荐前两种方案。

内容的提问来源于stack exchange,提问作者Saim Raza

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 06:26:35