Cython 对进口有啥作用?
Posted
技术标签:
【中文标题】Cython 对进口有啥作用?【英文标题】:What does Cython do with imports?Cython 对进口有什么作用? 【发布时间】:2012-12-09 06:13:19 【问题描述】:我想创建一个 Python 扩展,我真的很喜欢使用 Cython 的想法。主要是为了获得更多关于它的知识并利用速度增益(如果有的话)。我已经阅读了很多 Cython 文档,但我还不是计算机科学家,并且没有深入了解底层基础知识,因此我提出以下问题的原因:
我只是想知道,如果我在我正在开发的 Python 扩展中使用外部导入的(例如,ORM 或 SQL 库或任何其他第三方库)会发生什么?
Cython 是如何处理的?
这个导入的库/扩展是纯 Python 还是编译后的有区别吗?
处理这个问题的正确方法是什么?
谢谢。
PS。问题以粗体显示。
【问题讨论】:
【参考方案1】:cython 的目标是与 python 兼容,即你可以对任何 python 代码进行 cythonize 并且它将像以前一样工作。目前,大部分 python 代码已经可以工作了。 Cython 还允许您优化部分代码并将其编译为更高效的 C 代码。
话虽如此,任何 python 导入都将保持默认状态。对它们的任何调用都将作为 python 命令发出。即使模块是用 C 编写的,cython 也会通过 python 绕道来调用模块的函数。如果要直接使用 C 库,则必须为它们提供 cython 绑定。 cython documentation explains how to do this。
通常,python 充当监督者并处理模块/类的范围。如果一个模块中的代码调用任何 python 函数(或访问 python 变量),python 将根据调用者的范围解析调用。如果被调用的函数恰好在第二个模块中,python 很乐意使用它。调用者只会得到结果,而不应该真正关心其他函数是否在不同的模块中。因此,关键是决定调用哪个函数的 python 作用域规则。
【讨论】:
以上是关于Cython 对进口有啥作用?的主要内容,如果未能解决你的问题,请参考以下文章
来自 cython wiki 的 Hello World 不起作用