Hen*_*ino 6 python distutils python-module
我想在一个包下收集多个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'])],
)
Run Code Online (Sandbox Code Playgroud)
我的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;
}
Run Code Online (Sandbox Code Playgroud)
它构建和安装很好,但我无法导入foopkg.foo!如果我将它重命名为"foo",那就完美了.
任何想法如何使"foopkg.foo"工作?例如,将C代码中的Py_InitModule()中的"foo"更改为"foopkg.foo"没有帮助.
__init__.py文件foopkg夹中必须有一个文件,否则Python无法识别为包.
创建一个foopkg文件夹,在那里setup.py放一个空文件__init__.py,并添加packages一行到setup.py:
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'])],
)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1356 次 |
| 最近记录: |