Python3.12下f2py运行fib示例报错:系统找不到指定文件
解决Python3.12+NumPy2.0下f2py meson后端WinError2文件未找到问题
问题核心定位
Python3.12移除了distutils组件,f2py默认切换到meson后端,但在Windows+MinGW环境下,meson可执行文件的路径识别存在bug,导致subprocess调用时executable参数为None,触发WinError2"系统找不到指定文件"的错误。
分步解决方案
1. 显式指定meson可执行文件路径
- 先确认meson已安装,执行:
未安装则执行:pip list | findstr mesonpip install meson ninja - 找到meson.exe的绝对路径,通常在Python的Scripts目录下,示例路径:
C:\Users\<你的用户名>\AppData\Local\Programs\Python\Python312\Scripts\meson.exe - 编译时显式指定路径:
f2py --meson-executable "C:\Users\<你的用户名>\AppData\Local\Programs\Python\Python312\Scripts\meson.exe" -c fib1.f -m fib
2. 修复MinGW环境变量优先级
- 将MinGW64的bin目录(如
C:\mingw64\bin)移到系统PATH环境变量的最顶端,避免和Windows自带工具(如link.exe)冲突 - 重启MinGW64终端,依次验证以下命令能正常输出版本信息:
gfortran --version gcc --version meson --version ninja --version
3. 降级NumPy到兼容稳定版
NumPy2.0为大版本更新,和f2py的meson后端可能存在兼容性问题,可尝试降级到1.26.x系列:
pip install numpy==1.26.4 --force-reinstall
之后重新执行编译命令:
f2py -c fib1.f -m fib
4. 手动用meson构建绕开f2py的路径bug
- 先让f2py生成meson构建模板:
f2py --only-generate -c fib1.f -m fib - 进入生成的
fib目录,创建mingw-cross-file.txt,内容如下:[host_machine] system = 'windows' cpu_family = 'x86_64' cpu = 'x86_64' endian = 'little' [properties] c_compiler = 'gcc' cpp_compiler = 'g++' fortran_compiler = 'gfortran' - 手动执行meson构建命令:
meson setup build --cross-file mingw-cross-file.txt ninja -C build - 构建完成后,
build目录下会生成对应的.pyd模块文件。
内容的提问来源于stack exchange,提问作者user25624544
相关产品推荐
相关产品推荐

