Как мне создать расширение C в качестве подмодуля для основного модуля расширения C с помощью distutils? - PullRequest
1 голос
/ 06 августа 2020

У меня есть два файла, module.c и submodule.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, когда я делаю следующее:

>>> 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, поэтому вся помощь приветствуется.

...