我有一个用 distutils 打包的 Python 项目,其中有许多子模块。我希望在其中一些子模块中使用 C 构建一些 Python 扩展,但我不知道如何使 Python 扩展位于子模块中。以下是我正在寻找的最简单示例:
这是我的 Python 扩展 c_extension.c
:
#include <Python.h>
static PyObject *
get_answer(PyObject *self, PyObject *args)
{
return Py_BuildValue("i", 42);
}
static PyMethodDef Methods[] = {
{"get_answer", get_answer, METH_VARARGS, "The meaning of life."},
{NULL, NULL, 0, NULL}
};
PyMODINIT_FUNC
initc_extension(void) {
(void) Py_InitModule("c_extension", Methods);
}
以下是一个可用的 setup.py
文件示例:
from distutils.core import setup
from distutils.extension import Extension
setup(name='c_extension_demo',
ext_modules = [Extension('c_extension', sources = ['c_extension.c'])])
在虚拟环境中安装后,我可以执行以下操作:
>>> import c_extension
>>> c_extension.get_answer()
42
但是我想让c_extension
存在于一个子模块中,比如说foo.bar
。为了达到在Python shell中获得这样的行为,我需要在这个过程中进行哪些改变?
>>> import foo.bar.c_extension
>>> foo.bar.c_extension.get_answer()
42
python >= 3.10
,distutils
已被弃用,请参见我的另一个帖子了解详情。 - Ham