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

使用c_iso_binding和Cython封装Fortran的Python包单setup.py编译方案问询

可以通过单个setup.py实现该编译工作流,且有更简洁、无编译器不一致风险的实现方案

核心实现思路
  • 完全采用numpy.distutils作为构建入口,不需要引入Cython自带的distutils扩展,也不需要手动显式调用Fortran编译器。numpy.distutils原生支持同时处理Fortran源码编译、Cython代码转译与扩展编译,整个构建流程的编译器配置由工具统一管理,不会出现编译器不匹配的问题。
最简示例代码
from numpy.distutils.core import setup, Extension
from Cython.Build import cythonize
import numpy as np

# 定义扩展模块
fortran_cython_ext = Extension(
    name="mypackage.myext",
    sources=[
        "my_interface.pyx",  # 自行编写的Cython接口文件
        "fortran_wrapper.f90", # 带c_iso_bindings的Fortran封装代码
        "original_fortran_src.f90" # 原始Fortran业务代码
    ],
    include_dirs=[np.get_include()]
)

setup(
    name="mypackage",
    version="0.1.0",
    ext_modules=cythonize(fortran_cython_ext, language_level="3")
)
工作流说明
  • 构建时cythonize会自动把.pyx文件转译为C语言扩展代码
  • numpy.distutils会自动识别源码列表里的Fortran文件,调用匹配的Fortran编译器完成编译,同时自动处理Fortran模块的依赖顺序
  • 所有编译产物会自动链接为完整的Python扩展模块,完全匹配Fortran封装→Cython调用的工作流要求
可选优化
  • 可以把编译参数、包元信息都放到同目录的setup.cfg中配置,setup.py只保留核心构建逻辑,代码会更简洁。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 13:39:02