在 free pascal 中为 Python 开发模块 (.pyd) 相当容易,请参阅 Developing Python Modules with Pascal .但如果我想与 numpy 交互,这就没那么容易了。
使用 C 与 numpy 接口(interface)时,必须添加 #include <numpy/arrayobject.h>
代码,并调用 import_array();
在初始化函数中。
有没有办法在 pascal 中与 numpy 交互?
编辑1
如@wilberforce 回答下的评论中所述,import_array
头文件中定义的函数只是将 multiarray.pyd 模块导入当前解释器并进行一些检查。它很容易翻译成 Pascal 并且有效。
numpy C-API 函数最初不存在于 pythonXX.dll 中,因此无法静态链接它们。与 multiarray.pyd 的静态或动态链接对我不起作用。
所以更新后的问题是:有没有办法从非 C 代码访问嵌入在 multiarray.pyd 中的 C-API 函数?
最佳答案
从 Pascal 的角度来看,像对待任何其他 C 库一样对待 numpy 库 - 您需要包含 header 并将 import_array 声明为 external
cdecl
函数。
This guide涵盖细节。
为了编写 Python 扩展模块,您已经需要完成其中的一些工作,这样您的 Pascal 代码就可以使用 Python API 函数与 Python 对象进行交互。您可以在 cdecl 中看到这一点; external PythonLib;
您链接到的示例中的修饰符。可能您在执行此操作时不清楚。
关于free pascal 中的 Python+Numpy 模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19973572/