我正在開發一個包,它需要來自LAPACK Fortran庫的dgtsv
subroutine的Python綁定。目前,我將Fortran源文件dgtsv.f
與我的Python代碼一起分發,並使用numpy.distutils
自動將其包裝並將其編譯到可從Python調用的共享庫_gtsv.so
中。是否可以使用F2PY從共享庫中打包函數?
這裏就是我的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],
)
注意的是,爲了實際使用_gtsv.so
,我還是要對預先存在的LAPACK共享庫(extra_link_args=['-llapack']
)鏈接。由於該庫應該已經包含dgtsv
子例程,因此在我看來,將函數包裝到現有的共享庫中會更簡潔,而不必分發實際的Fortran源代碼。
但是我從來沒有遇到過任何使用F2PY來包裝屬於共享庫的函數的例子,而不是僅僅是原始的Fortran源代碼。這可能嗎?
你認爲答案是什麼通過@cronos?任何你不能使用ctypes的原因? –
@DebanjanBasu是的,'ctypes'可以做到這一點。由於某種原因,我從來沒有想過 - 我想我陷入了一種思維模式,爲了包裝一個Fortran共享庫,我需要一些Fortran特有的方法。好吧。 –