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

标签 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()

我得到的异常(exception)是

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

我怎样才能使导入工作?感谢您的帮助。

最佳答案

我在另一个项目中再次遇到这个问题。为了解决它,这是我所做的:

  • 所有 importcimport 语句必须是完全限定的
  • 所有的python代码都必须包含在一个rootFolder
  • setup.py 必须与 rootFolder 处于同一级别
  • rooFolder 中的所有文件夹,包括 rootFolder 都必须包含 __init__.py
  • 在您的 setup.py 中,扩展的 include_dirs 必须包含 '.'

我创建了一个简单的项目来说明 here .
这个page帮助我创建了它。
但是我的项目比较简单,如果我拥有它,我想它会对我有很大帮助。
我的项目还说明了如何自动构建项目中的所有 cython 文件。

关于python - Cython:ImportError:没有名为 'myModule' 的模块:如何将包含 cimport 的 cython 模块调用到另一个 cython 结节?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9882447/

相关文章:

python - Cython 直接访问全局变量

python - 在 Windows 中链接库

python - np.ascontiguousarray 与 np.asarray 与 Cython

python - cython编译错误 'is not a type identifier'

python - 如何使用python读取xml文件?

python - 字典分配使 Cython 崩溃

python - Sklearn.model_selection GridsearchCV ValueError : C <= 0

python - Google距离矩阵不包含村庄

python - 如何在连接后重新索引 pandas DataFrame

python - 是否可以切换 sklearn 管道中的某个步骤?