如何安装与Python.h关联的库



我正在从Python调用C。我的"你好世界"program引用了像' PyUnicode_FromString'这样的函数,我相信它们的原型在头文件Python.h中。我的系统有头文件,但似乎缺乏相关的库。我不知道该安装什么。我已经完成了"apt-get install python3-dev."要么我需要安装库,要么我如果它已经存在,那么我需要在编译时指向它。下面是我的代码:

#include <Python.h>
static PyObject* _hello_world(PyObject* self) {
return PyUnicode_FromString("hello world");
}
static struct PyMethodDef methods[] ={
{"hello_world", (PyCFunction)_hello_world, METH_NOARGS,},
{NULL, NULL}
};
static struct  PyModuleDef module= {
PyModuleDef_HEAD_INIT,
"_hello",
NULL,
-1,
methods
};
PyMODINIT_FUNC PyInit_hello(void) {
return PyModule_Create(&module);
}

您要查找的库是libpython,它应该已经安装了。在Debian和Ubuntu上,它在libpython3.8包中(或类似的,取决于版本)。

但是,只有在将Python嵌入到本机程序中时才需要担心这个问题。如果你想用C语言编写模块来扩展Python,我认为你根本不需要libpython,而且无论如何,如果你用文档中描述的常用方式构建模块,distutils/setuptools应该为你照顾所有这些细节。


旁注:除非你有很好的理由,否则现在通常不建议使用Python C/c++ API。如果你只是玩玩,了解一下CPython的内部是如何工作的——太棒了!继续,玩得开心!

但是如果你只是想从Python程序中调用一些C代码,那么最好的方法通常是使用cffi或ctypes调用它,或者在Cython中编写扩展模块。所有这些选项都更容易,并且不太可能与Python的未来版本发生冲突,并且前两个选项具有在Python的其他实现(即PyPy)上良好工作的额外好处。

最新更新