如何使用distutils将C扩展构建为C扩展主模块的子模块?

时间:2020-08-06 18:43:03

标签: python-3.x distutils python-c-api distutils2

我有两个文件,module.csubmodule.c

在setup.py中有以下代码:

from distutils.core import setup, Extension

module = Extension('module', sources = ['module.c'])

submodule = Extension('submodule', sources = ['submodule.c'])

setup (name = 'module',
       version = '0.1',
       description = 'a module that does things',
       ext_modules = [module, submodule])

我将其构建如下:

$ DISTUTILS_DEBUG=1 python3 setup.py build

在python shell中,当我执行以下操作时:

>>> import module # works
>>> from module import submodule # this should work
...
ImportError: cannot import name 'submodule' from 'module' (/home/username/Projects/module/build/lib.linux-x86_64-3.8/module.cpython-38-x86_64-linux-gnu.so)
>>> import module.submodule # is this supposed to work?
...
ModuleNotFoundError: No module named 'module.submodule'; 'module' is not a package
>>> import submodule # This should not work
...
ImportError: dynamic module does not define module export function (PyInit_submodule)

请注意,在最后一种情况(import submodule)中,我的PyInit函数被命名为PyInit_module_submodule(),该函数抛出了ImportError。如果我将其更改为PyInit_submodule(),则import submodule可以正常工作。

我可能对模块在Python中的工作方式有一个基本的误解,因此感谢所有帮助。

0 个答案:

没有答案