Python 是否可以使用F2PY包装共享库中的函数?

Python 是否可以使用F2PY包装共享库中的函数?,python,numpy,distutils,lapack,f2py,Python,Numpy,Distutils,Lapack,F2py,我正在开发一个包,该包需要LAPACK Fortran库中的Python绑定。目前,我正在将Fortran源文件dgtsv.f与我的Python代码一起分发,并使用numpy.distutils自动将其包装并编译到一个共享库\u gtsv.so,该库可从Python调用 下面是我的setup.py文件目前的样子: from numpy.distutils.core import setup, Extension, build_ext import os fortran_sources = [

我正在开发一个包,该包需要LAPACK Fortran库中的Python绑定。目前,我正在将Fortran源文件
dgtsv.f
与我的Python代码一起分发,并使用
numpy.distutils
自动将其包装并编译到一个共享库
\u gtsv.so
,该库可从Python调用

下面是我的
setup.py
文件目前的样子:

from numpy.distutils.core import setup, Extension, build_ext
import os


fortran_sources = ["dgtsv.f"]
gtsv = Extension(
    name="pyfnnd._gtsv",
    sources=[os.path.join("pyfnnd", "LAPACK", ff) for ff in fortran_sources],
    extra_link_args=['-llapack']
)

setup(
    name='pyfnnd',
    py_modules=['_fnndeconv', 'demo', '_tridiag_solvers'],
    cmdclass={'build_ext': build_ext.build_ext},
    ext_modules=[gtsv],
)
请注意,为了实际使用
\u gtsv.so
,我仍然必须链接到预先存在的LAPACK共享库(
extra\u link\u args=['-llapack']
)。因为这个库应该已经包含了
dgtsv
子例程,所以在我看来,只将函数包装在现有的共享库中,而不必分发实际的Fortran源代码会更干净


然而,我从未遇到过任何使用F2PY包装共享库中函数的例子,而不仅仅是原始Fortran源代码。这可能吗?

我认为您只需要C类型,在本页上有一个调用
lapack
函数的完整示例:

您得到的函数如下所示:

import ctypes
from ctypes.util import find_library
lapack = ctypes.cdll.LoadLibrary(find_library("lapack"))
dgtsv = lapack.dgtsv_

你认为@cronos的答案如何?有什么理由不能使用ctypes吗?@DebanjanBasu是的,
ctypes
会起作用。出于某种原因,我从未想到过——我想我的思维定势是,我需要一些特定于Fortran的方法来包装Fortran共享库。哦,好吧。干杯——这比我想象的要简单得多!我会接受你的回答,但我会等到悬赏期结束后再奖励,以防万一其他人有什么好的建议。