在CentOS上集成Fortran与Python可以通过多种方式实现,以下是一些常见的方法:
f2py
f2py
是NumPy提供的一个工具,可以将Fortran代码转换为Python模块。
安装必要的软件包:
sudo yum install numpy scipy
编写Fortran代码:
创建一个简单的Fortran文件,例如example.f90
:
subroutine add(a, b, c) bind(c, name="add")
use, intrinsic :: iso_c_binding
real(c_double), intent(in) :: a, b
real(c_double), intent(out) :: c
c = a + b
end subroutine add
使用f2py
生成Python模块:
f2py -c example.f90 -m example
在Python中使用生成的模块:
import example
result = example.add(2.0, 3.0)
print(result) # 输出 5.0
cython
cython
可以将Fortran代码包装成Python可调用的函数。
安装Cython:
pip install cython
编写Fortran代码:
同样创建一个Fortran文件example.f90
。
编写Cython接口文件:
创建一个Cython接口文件example.pyx
:
cdef extern from "example.f90":
double add(double a, double b)
def py_add(double a, double b):
return add(a, b)
创建setup.py
文件:
from setuptools import setup
from Cython.Build import cythonize
setup(
ext_modules=cythonize("example.pyx"),
include_dirs=['/usr/include'], # 根据实际情况调整路径
libraries=['gfortran'],
library_dirs=['/usr/lib64']
)
编译Cython代码:
python setup.py build_ext --inplace
在Python中使用生成的模块:
import example
result = example.py_add(2.0, 3.0)
print(result) # 输出 5.0
pybind11
pybind11
是一个轻量级的头文件库,用于将C++代码暴露给Python。虽然它主要用于C++,但也可以通过一些技巧与Fortran一起使用。
安装pybind11:
pip install pybind11
编写Fortran代码:
创建一个Fortran文件example.f90
。
编写C++包装器:
创建一个C++文件wrapper.cpp
:
#include <pybind11/pybind11.h>
extern "C" {
#include "example.h" // Fortran编译生成的头文件
}
namespace py = pybind11;
PYBIND11_MODULE(example, m) {
m.def("add", &add, "A function that adds two numbers");
}
编写setup.py
文件:
from setuptools import setup, Extension
import pybind11
ext_modules = [
Extension(
'example',
['wrapper.cpp'],
include_dirs=[pybind11.get_include(), '/usr/include'],
language='c++'
),
]
setup(
name='example',
version='0.1',
ext_modules=ext_modules,
)
编译C++代码:
python setup.py build_ext --inplace
在Python中使用生成的模块:
import example
result = example.add(2.0, 3.0)
print(result) # 输出 5.0
通过以上方法,你可以在CentOS上成功集成Fortran与Python。选择哪种方法取决于你的具体需求和偏好。