编译的使用f2py的Fortran库是否依赖于numpy?

3
我有一个Fortran 95代码,想要使用f2py编译成Python库。事实上,我已经完成了这个过程,并且它工作得很好。生成的.pyd(.so)文件是否依赖numpy?是否可以在没有安装numpy的情况下使用它?是否有其他选项将所需部分嵌入到最终库中,以便它不具有依赖项?
我考虑将此库作为商业产品的附属库,并希望最终用户在他的系统上尽可能少地安装软件,因此建议我的未来客户安装numpy并不适合我。我已经广泛搜索了解答案,但似乎找不到答案。
如果不可能,请您提供一种无依赖方式来使用Python包装Fortran代码。

请访问网站www.fortran90.org,查看与C的接口部分以及随后的与Python的接口部分。 - Warren Weckesser
2个回答

0

恐怕无法在不使用numpy的情况下进行这个操作,因为f2py在内部产生了numpy依赖。你的代码需要用FORTRAN编写吗?如果可以用C/C++编写,那么可能有绕过依赖的机会,请查看this book的第7章以获取更多相关信息。


人们可以像C和C++一样绑定Fortran(自1990年以来不再称为FORTRAN)。无需重写为C++。 - Vladimir F Героям слава
谢谢你的回答!我担心答案会很相似。我猜可以使用C/C++重新做一遍,但这会有些麻烦。涉及到大量的矩阵数学运算,可以很容易地使用numpy重新完成,但我之所以转向FORTRAN是为了避免首先使用numpy...我猜想使用f2py编译成numeric或numarray会创建对这两个模块的依赖... - Vassil Kateliev
谢谢@VladimirF。是的,确切地说它是Fortran 95代码。也许我早些时候应该提到这一点。 - Vassil Kateliev
@VassilKateliev 我再次强调,您可以像绑定C或C++一样绑定Fortran到Python。无需重写Fortran代码。问题在于您是否需要在Python代码中使用NumPy,而且一旦使用相同的方法调用它们,您可能不需要在C++和Fortran中都使用它。 - Vladimir F Героям слава

0
在fortran90.org网站上,有专门介绍Fortran C接口的部分。虽然使用NumPy是可能的,但使用iso_c_binding进行纯C接口也是完全可行的。而且它是标准的一部分!
请参见{{link1:与C接口} }和其后面的章节。该链接涉及从Fortran调用C,但仍然直接相关。下一节使用Cython以“à la C”的方式调用Python中的Fortran,但使用了NumPy。使用ctypes的部分不使用NumPy。
注意:您需要一个Fortran 2003编译器。Fortran 95代码当然是合法的Fortran 2003,因此您可以将包装器/接口部分添加到您的代码中。

谢谢!是的,我知道fortran90.org指南,但所有给出的示例都使用numpy数组。由于Python没有“本地”数组实现,我认为这是为Fortran代码提供“足够存储空间”的一种方式,但numpy不适合我。我将尝试Cython和ctypes,希望至少Cython的内存视图数组能够完成工作...我对任何建议都持开放态度,包括如何(以及哪些类型)将数组传递给Fortran库并返回。 - Vassil Kateliev
Python有内存视图数据类型。它与PEP 3118相关,其目的是使绑定到依赖于数组的代码成为可能,而无需使用NumPy。对于C/Fortran扩展,您必须做一些工作(必须自己管理数据缓冲区结构),但这种可能性是真实存在的 :-) - Pierre de Buyl

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接