在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。選擇哪種方法取決于你的具體需求和偏好。