2012-10-12 1 views
3

하나의 패키지 아래에 여러 파이썬 모듈을 모으고 싶습니다. 그래서 그들은 파이썬 패키지와 모듈의 글로벌 세트에서 너무 많은 이름을 예약하지 않습니다. 하지만 C 언어로 쓰여진 모듈에 문제가 있습니다.내 파이썬 C 모듈을 패키지 안에 넣는 법?

다음은 공식 Python 문서에서 직접 작성한 간단한 예제입니다. http://docs.python.org/distutils/examples.html

from distutils.core import setup 
from distutils.extension import Extension 
setup(name='foobar', 
     version='1.0', 
     ext_modules=[Extension('foopkg.foo', ['foo.c'])], 
    ) 

내 foo.c를 파일이

그것은 구축하고 잘 설치
#include <Python.h> 

static PyObject * 
foo_bar(PyObject *self, PyObject *args); 

static PyMethodDef FooMethods[] = { 
    { 
     "bar", 
     foo_bar, 
     METH_VARARGS, 
     "" 
    }, 
    {NULL, NULL, 0, NULL} 
}; 

static PyObject * 
foo_bar(PyObject *self, PyObject *args) 
{ 
    return Py_BuildValue("s", "foobar"); 
} 

PyMODINIT_FUNC 
initfoo(void) 
{ 
    (void)Py_InitModule("foo", FooMethods); 
} 

int 
main(int argc, char *argv[]) 
{ 
    // Pass argv[0] to the Python interpreter 
    Py_SetProgramName(argv[0]); 

    // Initialize the Python interpreter. Required. 
    Py_Initialize(); 

    // Add a static module 
    initfoo(); 

    return 0; 
} 

처럼 보이지만 나는 foopkg.foo를 가져올 수 없습니다 : 당신은 여기에서 페이지 하단에서 찾을 수 있습니다! 이름을 "foo"로 변경하면 완벽하게 작동합니다.

어떻게하면 "foopkg.foo"작업을 할 수 있습니까? 예를 들어 C 코드의 Py_InitModule()에서 "foopkg.foo"로 "foo"를 변경해도 도움이되지 않습니다.

답변

4

foopkg 폴더에 __init__.py 파일이 있어야합니다. 그렇지 않으면 Python이 패키지로 인식하지 못합니다.

setup.pyfoopkg 폴더를 만들고 거기에 __init__.py을 빈 파일을 넣어 setup.pypackages 줄을 추가 : 속임수를 썼는지

from distutils.core import setup 
from distutils.extension import Extension 
setup(name='foobar', 
     version='1.0', 
     packages=['foopkg'], 
     ext_modules=[Extension('foopkg.foo', ['foo.c'])], 
    ) 
+0

을! 고마워요 :) 나는 아직도 파이썬 문서에 언급되어 있어야한다고 생각하지만 : / –

관련 문제