如何知道我的代码是通过Cython还是标准Python解释器运行的?

如何知道我的代码是通过Cython还是标准Python解释器运行的?,python,cython,Python,Cython,是否有可靠的方法在运行时检查某些python代码是否是“cythonized”的,或者它是否运行在标准python解释器中? 谢谢 当我导入类似的模块并查看它们的。\uuuuu文件\uuuu属性时,我会得到 In [205]: which.__file__ Out[205]: .../which.py' In [206]: which_cy.__file__ Out[206]: '.../which_cy.cpython-34m.so' cythonized模块是从.so文件导入的,而pyt

是否有可靠的方法在运行时检查某些python代码是否是“cythonized”的,或者它是否运行在标准python解释器中?
谢谢

当我导入类似的模块并查看它们的
。\uuuuu文件\uuuu
属性时,我会得到

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
)。但是还有其他编译代码的方法,它们也会创建
。所以
文件。所以这并不区分编译路由

至于个别功能:

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>'
[225]中的
:repr(which.非零)
出[225]:“
In[226]:repr(该值为非零)
出[226]:“”
cython
不“运行”代码。它将文件(例如.*.pyx)转换为C代码。然后对其进行编译,生成一个可加载的模块(
.so
)文件。然后由Python解释器导入并运行。我不知道是否有办法运行
。因此
代码是一个备用的可执行文件


或者,您真的想知道给定编译模块中的代码是否使用了紧凑的C代码,而不是调用Python函数(主要是Python对象及其方法)?你可以看看C代码。两者都使用编译后的代码,但其中一个在检查类型、边界等方面有很大的开销。Cython教程的要点是如何将Python的通用性转移到更快的C定义上。

回答这个问题,因为这个问题在搜索引擎上是最重要的回答,答案没有帮助


我很困惑,你被迫对cython代码使用不同的语法,是吗?你怎么会不知道?为什么你需要知道这些?@BrianCain:Cython可以加速纯Python代码和Cython代码。这不是一个不合理的问题;platform.python_implementation()
是您想要的。
cython
不是一个与
CPython
pypypy
相同的实现。@BrianCain我不需要知道这一点,我很好奇这是否可能,仅此而已。我意识到我的问题不是很清楚,但感谢您的回答。实际上,我只是想知道是否有可能告诉appart一个用Cython生成的.so模块,或者以其他任何方式提供一个编译好的python/C模块和一个标准的.py导入。你用
。\uuuuuu文件\uuuuu
属性的答案很好,我想知道为什么我自己没有得出这个结论!所以非常感谢@hpaulj我有一个问题,您可以提供一些见解。
import cython
if cython.compiled:
    print("Yep, I'm compiled.")
else:
    print("Just a lowly interpreted script.")