Mac终端编译Pierrehumbert气候Python代码遇f2py未找到问题求助
解决《行星气候原理》旧代码组件安装的f2py报错问题
问题描述
我要安装Pierrehumbert所著《行星气候原理》里的老旧Python代码组件,该组件依赖gfortran编译器。我已安装gcc,推测gfortran也已连带安装,但执行python setup.py build --lite时出现sh: f2py: command not found错误。
已知F2PY是Python与Fortran的桥接工具,属于NumPy的一部分,也可作为独立命令行工具使用。原代码基于numpy 1.17开发,我当前使用numpy 1.24.3,已将代码中的numpy.float替换为numpy.float64以适配新版本,但怀疑原代码依赖的旧版f2py与当前NumPy存在兼容性问题,寻求解决方案。
终端报错记录
Last login: Mon May 1 19:55:58 on ttys000 widmerhans@Mac-mini-2 ~ % cd /Users/widmerhans/Documents/Python_PRINCIPLES_OF_PLANETARY_CLIMATE_Buch/PlanetaryClimateCourseware/CliMT-master widmerhans@Mac-mini-2 CliMT-master % python setup.py build --lite Found executable /usr/local/bin/gfortran Using gnu95 compiler src/grid ['src/grid/Driver.f90'] Building _grid.so ... sh: f2py: command not found f2py -c -m _grid --fcompiler=gnu95 --noopt -Isrc/grid -Isrc/grid/include -Isrc/grid/src -Isrc/grid/src/include --f77flags="-DIM=1 -DJM=1 -DKM=30 -ffixed-line-length-132 -fdefault-real-8" --f90flags="-DIM=1 -DJM=1 -DKM=30 -fdefault-real-8 -fno-range-check -ffree-form" _grid.pyf src/grid/Driver.f90 src/grid/src/dimensions.F90 sh: f2py: command not found +++ Compilation failed widmerhans@Mac-mini-2 CliMT-master %
解决方案
1. 修复f2py命令可访问性
从Python 3.9及更高版本开始,NumPy默认不再将f2py可执行文件添加到系统PATH中,导致直接调用f2py会提示找不到命令。解决方法:
- 直接修改setup.py文件,将所有
f2py替换为python -m numpy.f2py - 临时在终端中用
python -m numpy.f2py替代f2py测试命令是否可行
2. 适配新版本NumPy的f2py参数
旧版f2py的部分参数在新版本中已被废弃或调整,检查并修改setup.py中的f2py命令参数:
- 将
--noopt替换为-O0(新版本NumPy中--noopt已被移除) - 若当前gfortran版本较高,将
--fcompiler=gnu95替换为--fcompiler=gfortran以匹配编译器版本
3. 创建匹配原依赖的虚拟环境
如果上述调整后仍存在兼容性问题,建议创建虚拟环境安装原代码指定的numpy版本:
# 创建虚拟环境 python -m venv climt_env # 激活虚拟环境(Mac/Linux) source climt_env/bin/activate # 安装原代码依赖的numpy版本 pip install numpy==1.17 # 重新执行安装命令 python setup.py build --lite
4. 验证gfortran兼容性
虽然终端提示找到gfortran,但仍需确认版本是否符合原代码要求:
gfortran --version
若版本过低,可更新gcc/gfortran到兼容原代码的稳定版本。
内容的提问来源于stack exchange,提问作者widmerhans
相关产品推荐
相关产品推荐

