16
我有一個Python項目,其中包含許多子模塊,我使用distutils進行了打包。我想在C中構建一些Python擴展以生活在其中一些子模塊中,但我不明白如何讓Python擴展生活在子模塊中。下面是什麼我正在尋找最簡單的例子:如何構建一個Python C擴展,以便從模塊中導入它
這裏是我的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'])])
安裝在後virtualenv我可以做到這一點:
>>> import c_extension
>>> c_extension.get_answer()
42
但我想要c_extension
住在一個子模塊中,比如foo.bar
。我需要做什麼。這條管線切換到能獲得在Python殼的行爲是這樣的:
>>> import foo.bar.c_extension
>>> foo.bar.c_extension.get_answer()
42
感謝您的答案,但這並不適合我。我用'__init __。py'在'foo/bar'目錄中加入了'foo.bar.'前綴,但是在python shell中發生了這種情況: >>> import foo.bar.c_extension 回溯(最近呼叫最後): 文件「」,第1行,在 ImportError:沒有名爲c_extension的模塊 –
Rich
剛剛看到您的編輯,我也添加了包行。 – Rich
你使用的是什麼版本的Python?我正在測試2.7.3。 – nneonneo