python - 如何安装与 Python.h 关联的库
问题描述
我正在从 Python 调用 C。我的“hello world”程序引用了诸如 `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)上运行良好的额外好处。
推荐阅读
- python-3.x - 数据框爆炸并使用正确的数据进行映射
- java - 在 Play framework 2.3 中设置 cookie sameSite
- python-3.x - 根据 Condition Pandas Dataframe 拆分列数据
- c - 无限循环,程序忽略行
- java - 创建类 A.class 的模拟对象数组
- image - 如何使用 Dashboard 上传图像并使用 cloudinary 知道图像 URL?
- r - 如何在我的代码中停止 if 循环的计数过程?
- javascript - Electron - 创建文件时出现问题,错误“EROFS:只读文件系统”
- javascript - 如何使用 mvc 中的脚本保持 Timer 在后台运行
- php - 在 PHP 循环中计算多个纬度/经度之间的多个距离