python3.11版本下numpy和pandas版本不匹配导致导入阶段程序崩溃的问题

5 阅读2分钟

一、python3.11版本和numpy、pandas版本适配如下:

numpy 1.26.4:是 1.x 系列的最后一个稳定版本,对 Python 3.11 支持良好,且经过大量项目验证,极少出现崩溃。

pandas 2.2.3: 是 2.x 系列的长期支持版本,与 numpy 1.26.x 完全兼容,广泛用于生产环境。

二、现象和排查过程

执行main方法后,shell窗口的展示如下:

(.venv) PS D:\dmtcg\dmtcg\back_end> python .\main.py
(.venv) PS D:\dmtcg\dmtcg\back_end>

本项目是一个服务器项目。正常不会直接无打印无输出直接退出的。 但是没有任何错误打印和日志打印。

所以程序是在main函数之前就崩溃了。

  1. 检查服务所使用的端口8000是否被占用,结果发现没有被占用。

  2. 在main.py开头添加全局异常捕获,临时定位问题。

import sys
import traceback

def global_excepthook(exc_type, exc_value, exc_traceback):
    traceback.print_exception(exc_type, exc_value, exc_traceback)
    sys.exit(1)

sys.excepthook = global_excepthook

结果发现没有任何异常输出。

  1. 推测异常在导入语句模块。在相应的导入语句之前打印内容,定位问题。
print("import FastAPI")
from fastapi import FastAPI
print("import CORSMiddleware")
from fastapi.middleware.cors import CORSMiddleware

按照类似方法,递归的定位每一个导入。最终定位到是import pandas时,导致异常。

可能存在的问题:

  1. Microsoft Visual C++ Redistributable程序未启用。
  2. 磁盘空间不够
  3. pandas版本不兼容。

经过查看,Microsoft Visual C++ Redistributable已安装,磁盘空间也存在,则表示pandas版本可能不兼容。更换版本后正常运行了。

  1. 其他寻找错误的方法。

4.1 查看对应的日志

python -v -c "import pandas" 2> pandas_import.log

4.2 检查事件查看器。

如果windows错误弹窗未出现,可以查看 Windows 事件查看器中的应用程序错误日志:

  1. Win + R,输入 eventvwr.msc 并回车。
  2. 展开“Windows 日志” → “应用程序”。
  3. 在右侧查找时间点与运行命令吻合的错误事件,来源可能是“Application Error”或“Python”。双击查看详细信息,其中会记录出错的模块路径和异常偏移量。

例如,错误信息可能显示 faulting module path: C:...\numpy\core_multiarray_umath.pyd,这提示 numpy 的 C 扩展模块崩溃。