项目 rtmidi-python 在 Cython 0.29.37(Cython 3.0 之前的最新版本)上编译良好,但在 Cython 3.0 上编译失败,错误如下。
升级到 Cython 3 时是否存在已知的不兼容性?
如果是这样,在调用 Cython 3 时是否可以使用一个标志来保持与以前版本的向后兼容性,而不需要修改实际的 .pyx 文件?
Error compiling Cython file:
------------------------------------------------------------
...
self.thisptr.cancelCallback()
self.py_callback = callback
if self.py_callback is not None:
self.thisptr.setCallback(midi_in_callback, <void*>self.py_callback)
^
------------------------------------------------------------
rtmidi_python.pyx:92:41: Cannot assign type 'void (double, vector[unsigned char] *, void *) except * nogil' to 'RtMidiCallback' (alias of 'void (*)(double, vector[unsigned char] *, void *) noexcept'). Exception values are incompatible. Suggest adding 'noexcept' to the type of 'midi_in_callback'.
Traceback (most recent call last):
...
如果是这样,在调用 Cython 3 时是否可以使用一个标志来保持与以前版本的向后兼容性,而不需要修改实际的 .pyx 文件?
legacy_implicit_noexcept
https://cython.readthedocs.io/en/latest/src/userguide/source_files_and_compilation.html
升级到 Cython 3 时是否存在已知的不兼容性?
是的。 Cython 3 做出了许多重大更改。一些较大的记录在 https://cython.readthedocs.io/en/latest/src/userguide/migration_to_cy30.html