gpt4 book ai didi

python - 使用 C 和 Python 代码创建一个 Python 模块

转载 作者:行者123 更新时间:2023-11-28 16:37:07 25 4
gpt4 key购买 nike

我有一个使用 Python C API 创建的小型 Python 模块,我称之为 mycore。

我还在 Python 中创建了一些相关的实用脚本。

如何将两者放在同一个模块命名空间中?我知道我可以从我的 C 代码调用 Python 代码,但肯定有一种更简单的方法可以做到这一点。

谢谢

最佳答案

最明显的方法是将mycore 做成一个包。创建一个 mycore/__init__.py 导入 C 部分,通常命名为 _mycore 和 Python 部分:

from _mycore import *
from _mycorepy import *

在同一目录中,您将有一个 _mycore.so_mycorepy.py

另一种混合 Python 和 C 代码的方法是在嵌入式 Python 上调用 PyRun_String。这可能就是您所说的我知道我可以从我的 C 代码中调用 Python 代码...,但为了以防万一,这里有一个简单的示例,其中包含可能棘手的引用计数细节:

PyObject *get_factory()
{
PyObject *g, *runret, *factory;
// prepare a dictionary for the module to run in
g = Py_BuildValue("{s:O}", "__builtins__", PyEval_GetBuiltins());
if (!g)
return NULL;
// run Python code in the dictionary -- the code may import modules, etc.
runret = PyRun_String("\
def factory():\n\
return 42\n", Py_file_input, g, NULL);
Py_XDECREF(runret);
if (!runret) {
Py_DECREF(g);
return NULL;
}
Py_DECREF(runret);
// pick the stuff you care about from the dictionary and return it
factory = PyDict_GetItemString(g, "factory");
Py_INCREF(factory);
Py_DECREF(g);
return factory;
}

关于python - 使用 C 和 Python 代码创建一个 Python 模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24536096/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com