Cython:ImportError:没有名为'myModule'的模块:如何将包含cimport的cython模块调用到另一个cython结节?

时间:2012-03-27 02:08:10

标签: python cython

我正在尝试将cython模块data.pyx导入另一个cython模块user.pyx。 一切都编译好,但是当我尝试在python模块中调用user.pyx时,我收到错误'ImportError:No module named data'。

一切都在同一个目录中。

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

我的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

如何进行导入工作?谢谢你的帮助。

2 个答案:

答案 0 :(得分:14)

我在另一个项目中再次遇到此问题。要解决这个问题,我就是这样做的:

  • 所有importcimport声明必须完全合格
  • 所有python代码必须包含在rootFolder
  • setup.py必须与rootFolder
  • 处于同一级别
  • rooFolder中包含rootFolder的所有文件夹必须包含__init__.py
  • setup.py广告include_dirs中必须包含'.'

我创建了一个简单的项目来说明这个herepage帮助我创造了它 但是我的项目比较简单,如果有的话,我觉得它会帮助我很多 我的项目还说明了如何在项目中自动构建所有cython文件。

答案 1 :(得分:1)

我可能会遗漏一些关于Cython的内容,但我认为是:

import package.user
user.doSomething()