我能检测我的代码是在cPython还是Jython上运行吗?
我正在做一个小的Django项目,最后会放到一个叫做servlet容器的地方去运行。不过,如果我用cPython来开发,速度会快很多,而不是用Jython。所以我想在我的settings.py文件里检查一下我的代码是运行在cPython还是Jython上,这样我就可以告诉它使用合适的数据库驱动(postgresql_psycopg2或者doj.backends.zxjdbc.postgresql)。有没有简单的方法可以做到这一点呢?
5 个回答
正如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以下的版本中不兼容,但在未来的版本中是兼容的。
最简单明了的方法是:
导入平台模块
使用 platform.python_implementation() 这个函数
返回结果是 'CPython'
通常情况下,默认使用的解释器就是 CPython,它也是被认为效率最高的一个 :)