1つのパッケージに複数のPythonモジュールを集めたいので、Pythonパッケージとモジュールのグローバルセットからあまり多くの名前を予約しません。しかし、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コードの「foo」をPy_InitModule()から「foopkg.foo」に変更しても効果はありません。