-1
我寫了一個Python庫有兩個部分:如何打包Python C擴展,使其成爲普通Python模塊的子模塊?
- 一個Python C擴展
- 一個Python包裝的Python的C擴展
我希望能夠在這樣一個將它打包Python封裝器是頂級模塊foo
,Python C擴展器是位於foo._foo
的子模塊。不過,我至今只能創建兩個頂級模塊foo
和_foo
。
我需要做什麼在setup.py
和init_foo
C函數爲了完成這個?
(我的問題是精妙從this不同)
當前目錄結構:
foo/
foo/
__init__.py
foo.c
setup.py
tests.py
setup.py
看起來像:
from distutils.core import setup, Extension
module = Extension('_foo',
sources=['foo.c'])
setup(name='foo', packages=['foo'], ext_modules=[module])
foo.c
看起來像:
PyMODINIT_FUNC init_foo(void) {
PyObject *m;
m = Py_InitModule("_foo", FooMethods);
// ..
}
int main(int argc, char *argv[]) {
Py_SetProgramName(argv[0])
Py_Initialize();
init_pychbase();
}
foo/__init__.py
看起來像:
from _foo import _Foo, _Bar, _Baz
class Foo(object):
def __init__(self):
self._foo = _Foo()
@MatthewMoisen你說:「(我的問題是從[這裏]微妙不同(http://stackoverflow.com/questions/12097755/how-to -build-a-python -c-extension-so-i-can-import-it-from-a-module))「你能解釋一下爲什麼嗎? – MSeifert
@MSeifert在接受了另一個嘗試之後,我現在意識到這並不足以證明一個新問題。 (不同之處在於我希望將我的c擴展名更深一層,而OP則希望他的兩級更深)。我的問題是我的'tests.py'文件和foo模塊位於同一個目錄,所以當我運行它時導入是關閉的。創建一個'tests/tests.py'安裝程序解決了這個問題。 –