Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将python库绑定到C_Python_C_Binding - Fatal编程技术网

将python库绑定到C

将python库绑定到C,python,c,binding,Python,C,Binding,我想做的与大多数人想做的相反:我有一个用Python编写的库,我想让C(可能还有其他语言)可以使用它 我知道这一问题的典型答案是使用C语言的Python库,即: #包括 int main(int argc,char*argv[]) { Py_初始化(); PyRun_SimpleString(“从导入时间开始,ctime\n” “打印“今天是”,ctime(time())\n”); Py_Finalize(); 返回0; } (来源:) 然而,对我来说,这似乎不太理想: 很难看 这只是为了

我想做的与大多数人想做的相反:我有一个用Python编写的库,我想让C(可能还有其他语言)可以使用它

我知道这一问题的典型答案是使用C语言的Python库,即:

#包括
int
main(int argc,char*argv[])
{
Py_初始化();
PyRun_SimpleString(“从导入时间开始,ctime\n”
“打印“今天是”,ctime(time())\n”);
Py_Finalize();
返回0;
}
(来源:)

然而,对我来说,这似乎不太理想:

  • 很难看
  • 这只是为了C
相反,我想要的是一种将我的库绑定到许多语言的方法,包括C语言。 我不关心自动包装器生成:我的库非常简单,所以我可以编写粘合代码

目前,我提出的唯一解决方案是使用与上面类似的代码将我的库绑定到C,然后使用将C库绑定到其他语言

有更好的吗?

好的,C是编程的核心。所以我认为你的方法是正确的。为C创建一个绑定,然后使用SWIG和其他语言的FFI等工具绑定到C

我只想到另一个想法。今天,我们看到HTTP作为一种新的API和接口出现。因此,可以考虑创建一个用python编写的小型Web服务,提供一些REST接口。但显然,这只在某些情况下才有意义


当然,一旦您决定在一个单独的进程中运行python库,就有了进程间通信的所有可能性,比如命名管道或套接字,以及诸如或之类的工具包

好吧,我不需要像运行守护程序的库这样的花哨(至少现在不需要)。所以我想我会手动编写一个C库,连接到python库;然后,我将使用SWIG对其他语言进行绑定。
#include <Python.h>

int
main(int argc, char *argv[])
{
  Py_Initialize();
  PyRun_SimpleString("from time import time,ctime\n"
                     "print 'Today is',ctime(time())\n");
  Py_Finalize();
  return 0;
}