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. 兼容性一览
  6. Cython CPython 平台 Function 操作 Explanation Source Code Remark
    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 Source Code *.C 中间代码 不完整 正常 有代码丢失
    3.0.2 3.8.10 Windows amd64 与现有模块同名 编译时 import 不编译 正常
    open(file, mode="rb") *.C 中间代码 不完整 正常 获取内容为空
    数字字符操作 *.C 中间代码 不完整 正常 丢失数字字符
    局部变量 list 调用 __init__() 特殊方法 编译后无法运行 正常 引发 TypeError 需要自变量

Copyright Notice: This article is exclusive original manuscripts, copyrighted by Happy Digits Software , shall not be reproduced without permission.