执行f2py -c --help-fcompiler命令时进程挂起问题求助
解决f2py执行
--help-fcompiler时无限挂起的问题 看起来你碰到了numpy 1.16.0版本里f2py的一个老bug,结合你给出的调用栈和输出信息,咱们来分析下原因和解决办法:
问题根源
这个挂起的核心原因是numpy 1.16.0的distutils.fcompiler模块存在兼容性问题:
- 从你提供的Gnu95FCompiler属性能看到,
compiler_fix参数里重复出现了-Wall和-g,这是numpy生成编译器命令时的一个小错误; - 更关键的是,这个版本的numpy在调用
shlex.split解析这些参数时,和Python 3.6的shlex模块交互出现了死循环,导致进程一直卡住无法继续执行。
解决方案
1. 升级numpy版本(最推荐)
numpy 1.16.0是2019年的老版本,后续的1.17.x及以上版本已经修复了大量distutils和f2py相关的bug。你只需要在虚拟环境里执行:
pip install --upgrade numpy>=1.17.0
升级完成后再重新运行f2py -c --help-fcompiler,应该就能正常输出所有可用编译器的信息,不会再挂起了。
2. 临时修复(仅用于无法升级的场景)
如果因为某些限制不能升级numpy,你可以手动修改numpy的代码来绕过这个问题:
- 找到你虚拟环境里的文件:
TEST_ENV/lib/python3.6/site-packages/numpy/distutils/fcompiler/__init__.py - 定位到第472行的
customize函数,找到调用shlex.split的代码段; - 把
shlex.split(cmd)替换成cmd.split()——因为你的编译器参数都不带空格,直接分割就能满足需求,这样可以避免shlex模块的复杂解析逻辑触发死循环。
3. 额外验证
你也可以先确认下gfortran本身是否正常工作,执行gfortran -dumpversion,如果能正常输出7,那就说明编译器本身没问题,问题确实出在numpy的老版本上。
内容的提问来源于stack exchange,提问作者abinitio
相关产品推荐
相关产品推荐

