我能检测我的代码是在cPython还是Jython上运行吗?

17 投票
5 回答
7794 浏览
提问于 2025-04-15 12:47

我正在做一个小的Django项目,最后会放到一个叫做servlet容器的地方去运行。不过,如果我用cPython来开发,速度会快很多,而不是用Jython。所以我想在我的settings.py文件里检查一下我的代码是运行在cPython还是Jython上,这样我就可以告诉它使用合适的数据库驱动(postgresql_psycopg2或者doj.backends.zxjdbc.postgresql)。有没有简单的方法可以做到这一点呢?

5 个回答

26

正如sunqiang所指出的

import platform
platform.system()

这个方法在Jython 2.5上可以用,但在之前的版本Jython 2.2上就不行了。此外,关于在Jython 3.x中如何返回更多与操作系统相关的信息也有一些讨论。虽然还没有最终决定,但为了确保向前和向后兼容,我建议使用:

import sys
sys.platform.startswith('java')

这个方法在Jython中会返回True,而在其他地方会返回False(实际上在Jython 2.2或更早的版本中,它会返回1表示Jython,返回0表示其他地方,但在if语句和其他检查中仍然可以正常使用)。这个方法在Jython 2.1及更高版本中都能用,并且在可预见的未来也会继续有效。

在Python 2.6或更高版本中(注意Jython 2.6还没有发布),还有另一个选择:

import platform
platform.python_implementation

这个方法会返回'CPython'表示C实现的Python,返回'IronPython'表示IronPython,并且会返回'Jython'表示Jython。显然,这个方法在2.6以下的版本中不兼容,但在未来的版本中是兼容的。

43

最简单明了的方法是:

导入平台模块

使用 platform.python_implementation() 这个函数

返回结果是 'CPython'

通常情况下,默认使用的解释器就是 CPython,它也是被认为效率最高的一个 :)

16

如果你在使用 Jython 的话

import platform
platform.system()  

返回 'Java'
这里有一些讨论,希望这能帮到你。

撰写回答