是否有一种可靠的方法可以在运行时检查是否有一些python代码是" cythonized"或者如果我们遇到标准的Python解释器? 谢谢!
答案 0 :(得分:5)
回答这个问题是因为这个问题是对搜索引擎的最高回应而且回答没有帮助。
来自http://docs.cython.org/en/latest/src/tutorial/pure.html
import cython
if cython.compiled:
print("Yep, I'm compiled.")
else:
print("Just a lowly interpreted script.")
答案 1 :(得分:4)
当我导入类似的模块并查看他们的.__file__
属性时
In [205]: which.__file__
Out[205]: .../which.py'
In [206]: which_cy.__file__
Out[206]: '.../which_cy.cpython-34m.so'
cythonized
模块是从.so
文件导入的,而python源是.py
(或.pyc
)。但是还有其他编译代码的方法,这些方法也会创建.so
个文件。所以这并没有区分编译路线。
对于个人职能:
In [225]: repr(which.nonzero)
Out[225]: '<function nonzero at 0xb4dd2d1c>'
In [226]: repr(which_cy.nonzero_cy)
Out[226]: '<built-in function nonzero_cy>'
cython
没有&#39;运行&#39;码。它将文件(例如* .pyx)转换为C代码。然后编译它,生成一个可加载模块(.so
)文件。然后由Python解释器导入并运行。我不知道是否可以将.so
代码作为可执行文件的一部分运行。
或者,您是否真的想知道给定编译模块中的代码是否使用严格的C代码而不是调用Python函数(主要是Python对象及其方法)?您可以查看C代码。两者都使用已编译的代码,但是在检查类型,边界等方面有很多开销。对Cython教程的全部观点是将Python通用性转移到更快的C定义的方法。