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

使用f2py调用Fortran95函数遇AttributeError:模块无对应属性

解决f2py调用Fortran函数时的AttributeError问题

问题原因

f2py对未封装在模块中的独立Fortran函数处理时,会受Fortran名称修饰规则(如自动加下划线、大小写转换)或默认导出逻辑影响,导致编译后的Python模块无法直接识别目标函数,单纯修改函数名大小写无法解决底层导出问题。

解决方案1:将Fortran函数封装到模块中(推荐)

f2py对Fortran模块的支持更完善,能明确暴露函数接口,是最可靠的解决方式。

修改你的Fortran代码,把函数放入模块:

module primemod
    implicit none
contains
    function isprima(p)
        integer, intent(in) :: p
        integer :: i
        logical :: isprima
        isprima = .true.
        if (p /= 2) then
            testloop: do i = 2, int(floor(sqrt(real(p))))
                if (modulo(p, i) == 0) then
                    isprima = .false.
                    exit testloop
                end if
            end do testloop
        end if
    end function isprima
end module primemod

重新执行编译命令:

python -m numpy.f2py -c -m isprim f2p.f95

修改Python调用代码,通过子模块访问函数:

import numpy as np
import isprim
print(isprim.primemod.isprima(5))  # 输出:True

解决方案2:编译时强制指定导出函数

若不想修改Fortran代码,可在编译时通过only:参数强制指定要导出的函数,规避f2py的默认处理逻辑:

执行编译命令:

python -m numpy.f2py -c -m isprim f2p.f95 only: isprima :

此时Python代码无需修改,直接调用即可:

import numpy as np
import isprim
print(isprim.isprima(5))  # 输出:True

额外排查方式

若仍有疑问,可先生成接口文件查看f2py的处理逻辑,确认函数是否被正确定义:

python -m numpy.f2py f2p.f95 -m isprim -h isprim.pyf

查看生成的isprim.pyf文件,检查函数的名称和导出状态是否符合预期。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 03:33:17