distutils로 패키지하는 많은 하위 모듈이있는 Python 프로젝트가 있습니다. 일부 하위 모듈에 살기 위해 C로 일부 Python 확장을 구축하고 싶습니다. 그러나 서브 모듈에 살기 위해 Python 확장을 얻는 방법을 이해하지 못합니다.모듈에서 가져올 수 있도록 Python C Extension을 빌드하는 방법
다음내 파이썬 확장 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
)을 게시하고 싶습니다. 어떤 것은 내가 이렇게 될 파이썬 쉘에서 동작을 얻을 수 있도록이 파이프 라인 변경해야 :
>>> import foo.bar.c_extension
>>> foo.bar.c_extension.get_answer()
42
답변 주셔서 감사합니다. 그러나 저에게는 도움이되지 않았습니다. 나는 각각'__init __. py'를 사용하여'foo/bar' 디렉토리를 만들었고'foo.bar.' 접두어를 setup 명령에 추가했지만 파이썬 쉘에서는 다음과 같은 일이 발생했습니다 : >>> import foo.bar.c_extension Traceback (최근 호출 마지막) : 파일 "", 줄 1, ImportError : 모듈이 c_extension이 아닙니다 –
Rich
그리고 편집을 보았습니다. 패키지 줄도 추가했습니다. – Rich
어떤 Python 버전을 사용하고 있습니까? 나는 2.7.3을 테스트 중이다. – nneonneo