Cython: ImportError: нет модуля с именем 'myModule': как вызвать модуль cython, содержащий cimport для другого контура cython?

Я пытаюсь импортировать модуль cython data.pyx в другой модуль cython user.pyx. Все компилируется нормально, но когда я пытаюсь вызвать user.pyx в модуле python, я получаю сообщение об ошибке "ImportError: No module named data".

Все находится в одном каталоге.

package/
    __init__.py   #empty
    setup.py      
    data.pxd
    data.pyx
    user.pyx

My setup.py

from distutils.core import setup
from distutils.extension import Extension
from Cython.Distutils import build_ext


ext_modules = [
    Extension("data", ["data.pyx"]),
    Extension("user", ["user.pyx"],include_dirs = ['myPackageDir'])
    ]

setup(
  name = 'app',
  cmdclass = {'build_ext': build_ext},
  ext_modules = ext_modules  
)

Выполнение следующей команды test.py вызовет ошибку.

import user     #this line raised the 'ImportError: No module named data' below
user.doSomething()

Исключением я получаю

Traceback:
 File "test.py", line 1, in <module>
    import package.user
  File "user.pyx", line 1, in init user (user.c:3384)
ImportError: No module named data

Как я могу заставить импорт работать? Спасибо за любую помощь.

Ответ 1

Я мог бы пропустить что-то о Cython, но я думаю, что это:

import package.user
user.doSomething()

Ответ 2

Я снова сталкиваюсь с этой проблемой в другом проекте. Чтобы решить эту проблему, вот что я сделал:

  • все import и cimport должны быть полностью определены
  • весь код python должен содержаться в rootFolder
  • setup.py должен быть на том же уровне, что и rootFolder
  • вся папка в rooFolder, включая rootFolder, должна содержать __init__.py
  • в setup.py расширение include_dirs должно содержать '.'

Я создал простой проект, который иллюстрирует это здесь.
Эта страница помогла мне создать ее.
Но мой проект проще, и я думаю, что это очень помогло бы мне, если бы у меня было это. Мой проект также иллюстрирует, как автоматически создавать все файлы cython в проекте.