原正常运行的NumPy.f2py在新版Intel oneAPI Fortran下报错
解决Windows 11下Intel oneAPI Fortran配合f2py生成PYD的AttributeError问题
问题根源
AttributeError: 'NoneType' object has no attribute 'group' 是因为numpy.f2py的正则表达式无法适配Intel oneAPI Fortran编译器的输出格式,匹配结果为空时调用group()方法触发错误——oneAPI编译器的输出格式和旧版Intel Fortran存在细微差异,导致解析失败。
修复方案
1. 优先升级numpy
numpy后续版本已修复对oneAPI编译器的兼容问题,执行升级命令:
pip install --upgrade numpy
2. 显式指定编译器
若升级后仍报错,在f2py命令中明确指定Intel oneAPI编译器:
Python -m numpy.f2py -c --fcompiler=intelem test3.f -m test3
或者直接指定编译器路径(替换为你的实际安装路径):
Python -m numpy.f2py -c --fcompiler=intelem --f90-exec="C:\Program Files (x86)\Intel\oneAPI\compiler\latest\windows\bin\intel64\ifort.exe" test3.f -m test3
3. 手动调整f2py的正则表达式(临时 workaround)
如果上述方法无效,修改numpy中解析编译器输出的代码:
- 找到numpy安装目录下的
numpy/f2py/f90mod_rules.py文件 - 定位到解析错误输出的正则表达式行,将旧格式(适配旧版Intel Fortran):
修改为适配oneAPI输出的格式:regex = re.compile(r'^.*?(\d+)\s+(\d+)\s+(Error|Warning)')
(oneAPI的错误输出通常为regex = re.compile(r'^.*?(\d+):(\d+)\s+(Error|Warning)')文件名:行号:列号 Error/Warning,旧版则是行号 列号 Error/Warning)
4. 验证测试
用fib1.f示例代码重新执行命令:
Python -m numpy.f2py -c fib1.f -m fib1
若成功生成fib1.pyd文件,说明问题已解决。
内容的提问来源于stack exchange,提问作者Ian King
相关产品推荐
相关产品推荐

