Python Cython:C类';myclass';已声明但未定义

Python Cython:C类';myclass';已声明但未定义,python,cython,cythonize,Python,Cython,Cythonize,我试图用Python创建一个用Cython编写的模块。该模块计划使用C++库来提供给不同的Python和Cython模块。 问题是: (base) $ python setup.py build Compiling queue/myqueue.pyx because it changed. [1/1] Cythonizing queue/myqueue.pyx Error compiling Cython file: --------------------------------------

我试图用Python创建一个用Cython编写的模块。该模块计划使用C++库来提供给不同的Python和Cython模块。 问题是:

(base) $ python setup.py build
Compiling queue/myqueue.pyx because it changed.
[1/1] Cythonizing queue/myqueue.pyx

Error compiling Cython file:
------------------------------------------------------------
...
# cython: language_level=3

from queue.myqueue import myclass
from queue.myqueue cimport myclass

cdef class myclass:
    ^
------------------------------------------------------------

queue/myqueue.pyx:6:5: C class 'myclass' is declared but not defined
Traceback (most recent call last):
  File "setup.py", line 11, in <module>
    setup(name="mymodule", ext_modules=cythonize([inumpy_queue]))
  File "site-packages/Cython/Build/Dependencies.py", line 1096, in cythonize
    cythonize_one(*args)
  File "site-packages/Cython/Build/Dependencies.py", line 1219, in cythonize_one
    raise CompileError(None, pyx_file)
Cython.Compiler.Errors.CompileError: queue/myqueue.pyx
档案: setup.py

队列/\uuuu init\uuuuu.py

print("called __init__.py")
队列/myqueue.pxd

# cython: language_level=3
cdef class myclass:
    cdef readonly int data

queue/myqueue.pyx

# cython: language_level=3

from queue.myqueue import myclass
from queue.myqueue cimport myclass

cdef class myclass:
    def __init__(self, shape):
        print("_____myclass::__init__()")
我做错了什么?
谢谢

这似乎与distutils有关。在命令行上调用cythonize效果很好

在pyx中,导入不带包前缀的myqueue.myclass可以工作:

from myqueue import myclass
from myqueue cimport myclass

应从queue/myqueue.pyx中删除以下行:

from queue.myqueue import myclass
from queue.myqueue cimport myclass
cdef
类字段的声明只能在
pxd
文件中。
def
声明只能在
pyx
文件中。 由于您的
pyx
pxd
文件代表一个Cython模块,因此无需将/cimport
pxd
导入
pyx

另外,在setup.py中,扩展名应该是
queue.myqueue
,以便将Cython模块
myqueue
放入文件夹
queue

另外,我使用
pip安装-e.
构建Cython模块。之后,我可以使用:

from queue.myqueue import myclass
c = myclass(1)

我也有同样的问题。我不确定这是否是一个解决方案,但我删除了import语句,因为“pyx”和“pxd”文件都具有相同的名称,只是再次编译它们,结果成功了。此外,这可能会有所帮助-
from queue.myqueue import myclass
from queue.myqueue cimport myclass
from queue.myqueue import myclass
c = myclass(1)