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

执行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的代码来绕过这个问题:

  1. 找到你虚拟环境里的文件:TEST_ENV/lib/python3.6/site-packages/numpy/distutils/fcompiler/__init__.py
  2. 定位到第472行的customize函数,找到调用shlex.split的代码段;
  3. 把shlex.split(cmd)替换成cmd.split()——因为你的编译器参数都不带空格,直接分割就能满足需求,这样可以避免shlex模块的复杂解析逻辑触发死循环。

3. 额外验证

你也可以先确认下gfortran本身是否正常工作,执行gfortran -dumpversion,如果能正常输出7,那就说明编译器本身没问题,问题确实出在numpy的老版本上。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 09:21:13