Cython 编译器的兼容性问题

*.PY 源代码编译成 *.PYD 动态库,最多可提速 20 - 30%。

Cython v0.29.36 是 3.x 之前的最后一个稳定版本。

  1. 信号/槽
  2. Cython v3.x 编译 PyQt PySide 时,要求信号/槽变量数一致,否则无法运行。

  3. 产生原因
  4. 调用由 Cython 编译生成的 *.PYD 文件与通过 Python 解释器运行 *.PY 源代码,存在些许差异;所以,编译后的应用程序与源代码版本也有差异。

    由于开发人员 (或理念) 的不同,发布后的代码由 *.PY 源代码格式变为 *.PYD 动态库格式,这种差异就会自然产生。

    工程越大,出现差异的可能性就越高。

    若源代码在某些方面与 Cython 不完全兼容,自然就有差异。

    由于 *.PYD 动态库比 *.PY 源代码可提速 20 - 30%,编写的算法在运行时速度方面也有差异。

  5. 兼容性一览
Cython CPython 平台 功能 操作 说明 源代码 备注
0.29.15 3.6.8 Windows amd64 模块路径名 含 - 字符 提示找不到此模块 正常
QSettings 读取别名定制容器转储值 完全不兼容 正常 引发 _pickle.PicklingError
0.29.27 3.8.10 Windows amd64 dict 调用 items() 方法 无法编译 正常
3.0.0 3.8.10 Windows amd64 QObject SIGNAL 信号声明 槽自变量数量异于信号 正常 引发 TypeError
str ASCII 文档路径 兼容不完整 正常 不兼容中文路径
*.PY 源代码 *.C 中间代码 不完整 正常 有代码丢失
3.0.2 3.8.10 Windows amd64 与现有模块同名 编译时 import 不编译 正常
open(file, mode="rb") *.C 中间代码 不完整 正常 获取内容为空
数字字符操作 *.C 中间代码 不完整 正常 丢失数字字符
局部变量 list 调用 __init__() 特殊方法 编译后无法运行 正常 引发 TypeError 需要自变量

版权声明: 本文为独家原创稿件,版权归 乐数软件 ,未经许可不得转载。