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

17 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
Run Code Online (Sandbox Code Playgroud)

我的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  
)
Run Code Online (Sandbox Code Playgroud)

运行以下test.py将引发错误.

import user     #this line raised the 'ImportError: No module named data' below
user.doSomething()
Run Code Online (Sandbox Code Playgroud)

我得到的例外是

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
Run Code Online (Sandbox Code Playgroud)

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

小智 16

我在另一个项目中再次遇到这个问题.为了解决这个问题,我做了以下事情:

  • 所有importcimport陈述必须完全合格
  • 所有的python代码必须包含在一个 rootFolder
  • setup.py必须在同一水平比rootFolder
  • 在所有文件夹rooFolder,包括rootFolder必须包含一个__init__.py
  • 在您setup.py的扩展名中include_dirs必须包含'.'

我创建了一个简单的项目来说明这一点.
这个页面帮助我创建了它.
但我的项目更简单,我认为如果我拥有它,它会帮助我很多.
我的项目还说明了如何在项目中自动构建所有cython文件.

  • 嗨,为什么不戴上github? (2认同)

rob*_*rob 2

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

import package.user
user.doSomething()
Run Code Online (Sandbox Code Playgroud)