【发布时间】:2020-06-03 16:24:28
【问题描述】:
我正在尝试在 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
我为原始问题创建了一个小型复制器。
topdir:
setup.py
queue/
queue directory:
__init__.py
myqueue.pxd
myqueue.pyx
文件: 设置.py
from distutils.core import setup
from distutils.extension import Extension
from Cython.Build import cythonize
inumpy_queue = Extension(
name="myqueue",
sources=['queue/myqueue.pyx'],
language="c++"
)
setup(name="mymodule", ext_modules=cythonize([inumpy_queue]))
队列/__init__.py
print("called __init__.py")
队列/myqueue.pxd
# cython: language_level=3
cdef class myclass:
cdef readonly int data
队列/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__()")
我做错了什么? 谢谢
【问题讨论】:
-
我遇到了同样的问题。不确定这是否是一个解决方案,但我删除了导入语句,因为 'pyx' 和 'pxd' 文件都具有相同的名称,只是再次编译它们,它工作。此外,这可能会有所帮助 - stackoverflow.com/questions/13669961/…