编译适用于 Cython 0.29,但不适用于 Cython 3.0

问题描述 投票:0回答:1

项目 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):
...
python cython
1个回答
0
投票

如果是这样,在调用 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

© www.soinside.com 2019 - 2024. All rights reserved.