我可以检测我的代码是在cPython还是Jython上运行?

Vas*_*sil 10 python django jython

我正在研究一个稍后将部署在servlet容器中的小型django项目.但是如果我使用cPython而不是Jython,开发会快得多.所以我想要做的是测试我的代码是否在我的settiings.py中的cPython或Jython上运行,所以我可以告诉它使用适当的db驱动程序(postgresql_psycopg2或doj.backends.zxjdbc.postgresql).有一个简单的方法吗?

Vin*_*nia 25

最明确的方式是:

进口平台

platform.python_implementation()

'CPython的'

默认情况下,大多数时候底层解释器只是CPython,也可以说是效率最高的:)


Fra*_*cki 21

正如孙强指出的那样

import platform
platform.system()
Run Code Online (Sandbox Code Playgroud)

适用于Jython 2.5,但这不适用于Jython 2.2(之前的Jython版本).此外,还有一些关于在Jython 3.x中为这些调用返回更多操作系统特定细节的讨论.在那里没有任何决定,但为了安全地向前和向前兼容,我建议使用:

import sys
sys.platform.startswith('java')
Run Code Online (Sandbox Code Playgroud)

对于Jython将返回True,而在其他地方返回False(实际上在Jython 2.2或更早版本中,它为Jython返回1,在其他地方返回0,但这在if语句和其他检查中仍然可以正常工作).这个调用至少可以在早在2.1的Jython中运行,并且在可预见的未来将会起作用.

在Python 2.6或更高版本中(注意Jython 2.6尚未发布)另一个选项是:

import platform
platform.python_implementation
Run Code Online (Sandbox Code Playgroud)

对于C的C实现返回'CPython',为IronPython返回'IronPython',并为Jython返回'Jython'.显然这个在2.6以下不向后兼容,但是将向前兼容.


sun*_*ang 16

如果你正在运行Jython

import platform
platform.system()  
Run Code Online (Sandbox Code Playgroud)

返回'Java'
这里有一些讨论,希望这有帮助.

  • 该链接已失效,并且该调用不正确。`python_implementation` 是正确的。 (2认同)

ubi*_*con 5

在 Python 3.3 及更高版本中,您可以使用sys.implementation并查看该name属性。