为什么这个.pyx文件不被识别为模块?

时间:2016-06-27 00:56:32

标签: python-3.x cython python-import setuptools

我遇到相对进口问题,但我似乎无法弄清楚这种情况有什么问题。它似乎就像从同一个包中的另一个模块直接相对导入一样,所以我对如何调试它感到茫然。

我的项目设置如下:

.
├── ckmeans
│   ├── __init__.py
│   ├── _ckmeans.pxd
│   ├── _ckmeans_wrapper.pyx
│   ├── _ckmeans.py
│   ├── _evaluation.py
│   └── _utils.py
└── setup.py

位于__init__.py的顶部:

from ._ckmeans import ckmeans  # _ckmeans.py

位于_ckmeans.py的顶部:

from . import _ckmeans_wrapper  # _ckmeans_wrapper.pyx

位于_ckmeans_wrapper.pyx的顶部:

cimport _ckmeans  # _ckmeans.pxd

我跑pip install --ignore-installed --upgrade -e .,一切似乎都很顺利。然后,当我尝试运行我的测试套件或解释器中的import ckmeans时,我收到错误:

ImportError: cannot import name '_ckmeans_wrapper'

当我在解释器中注释掉__init__.py然后import ckmeans的import语句时,它确实似乎缺少_ckmeans_wrapper模块。我怀疑在Cython版本中有些东西是静默失败的,但我不知道如何调试。

这是setup.py

import numpy as np
from Cython.Build import cythonize
from setuptools import setup, Extension

extension = Extension(
    name='_ckmeans_wrapper',
    sources=['ckmeans/_ckmeans_wrapper.pyx'],
    language="c++",
    include_dirs=[np.get_include()]
)

setup(
    name='ckmeans',
    version='1.0.0',
    packages=['ckmeans'],
    ext_modules = cythonize(extension),
    install_requires=['numpy', 'Cython']
)

1 个答案:

答案 0 :(得分:0)

name的{​​{1}}参数不正确。它应该是Extension