我想用几个模块组织一个发行版。最终会有一个C扩展模块,在同一个“级别”,几个纯python模块。我不确定是否应该将顶层视为命名空间。在
首先,我想创建一个模块蒙蒂·斯帕姆. 它将是一个C扩展。我把这个从Extending Python docs.拿出来的
monty/spam/spammodule.c#include
static PyObject * spam_system (PyObject * self, PyObject * args)
{
const char * command;
int sts;
if (!PyArg_ParseTuple (args, "s", &command))
return NULL;
sts = system (command);
return Py_BuildValue ("i", sts);
}
static
PyMethodDef SpamMethods [] = {
{ "system", spam_system, METH_VARARGS, "Execute a shell command" },
{ NULL, NULL, 0, NULL }
};
PyMODINIT_FUNC
initspam (void)
{
(void) Py_InitModule ("spam", SpamMethods);
}
我创建了一个设置工具设置.py在同一个目录中,运行“python设置.py“开发”模块运行良好。在
蒙蒂/垃圾邮件/设置.py在
^{pr2}$
在monty目录中:python -c 'import monty.spam'
Traceback (most recent call last):
File "", line 1, in
ImportError: No module named monty.spam
所以现在我想创建一个垃圾邮件“住在”蒙蒂的发行版。我在设置.py在蒙蒂目录里。(两个目录都有一个空的__init__.py)
我最近在蒙蒂的尝试/设置.py:(是的,find_包()在此版本中没有实用程序。)from setuptools import setup, Extension, find_packages
module = Extension ('spam', sources = [ './spam/spammodule.c' ])
print find_packages ()
setup (
name = 'MontyP',
version = '0.2',
namespace_packages = [ 'monty' ],
packages = find_packages (),
description = 'pure spam',
ext_modules = [ module ]
)
没有欢乐!在python setup.py develop
['spam']
error in MontyP setup command: Distribution contains no modules or packages for namespace package 'monty'