我可以检测我的代码是在cPython还是Jython上运行吗?
我正在处理一个小的django项目,该项目稍后将部署在servlet容器中。但是如果我使用cPython而不是Jython,开发速度会快得多。所以我想做的是测试我的代码是否在settiings.py中的cPython或Jython上运行,这样我就可以告诉它使用合适的db驱动程序(postgresql\u psycopg2或doj.backends.zxjdbc.postgresql)。有没有一种简单的方法可以做到这一点?如果您正在运行Jython我可以检测我的代码是在cPython还是Jython上运行吗?,python,django,jython,Python,Django,Jython,我正在处理一个小的django项目,该项目稍后将部署在servlet容器中。但是如果我使用cPython而不是Jython,开发速度会快得多。所以我想做的是测试我的代码是否在settiings.py中的cPython或Jython上运行,这样我就可以告诉它使用合适的db驱动程序(postgresql\u psycopg2或doj.backends.zxjdbc.postgresql)。有没有一种简单的方法可以做到这一点?如果您正在运行Jython import platform platform
import platform
platform.system()
返回“Java”,希望这对您有所帮助。您将为每个不同的环境提供独特的settings.py 您的development settings.py不应是QA/Test或production settings.py 我们所做的就是这样 我们有一个“master”settings.py,其中包含已安装的应用程序和其他变化不大的项目 我们有一些特定于环境的文件,它们的名称有
settings\u dev\u win32.py
和settings\u qa\u linux2.py
和
“设置\u co\u linux2.py”等
每个特定于环境的设置都会导入“主”设置,然后覆盖DB驱动程序之类的内容。由于每个设置文件对于一个环境都是唯一的,所以没有if语句,也没有检测我们运行在哪个环境中
生产(在Apache中,使用mod_wsgi和mysql)使用settings\u prod\u linux2.py
文件,而不是其他文件
开发(在使用sqlite的Windows中)使用
设置\u dev\u win32.py
文件 正如孙强所指出的
import platform
platform.system()
适用于Jython2.5,但不适用于Jython2.2(以前的Jython版本)。此外,在Jython3.x中还讨论了如何为调用返回更多操作系统特定的细节。没有任何决定,但为了安全地前后兼容,我建议使用:
import sys
sys.platform.startswith('java')
这将为Jython返回True,在其他地方返回False(实际上在Jython 2.2或更早版本中,它为Jython返回1,在其他地方返回0,但在if语句和其他检查中仍然可以正常工作)。这个调用在Jython中至少可以追溯到2.1版本,并且在可预见的将来仍然有效
在Python版本2.6或更高版本中(注意Jython 2.6尚未发布),另一个选项是:
import platform
platform.python_implementation
对于Python的C实现,返回'CPython',对于IronPython,返回'IronPython',对于Jython,返回'Jython'。显然,这一版本在2.6以下不向后兼容,但将向前兼容。最明确的方式是: 导入平台 platform.python_实现() “CPython”
默认情况下,大多数情况下,底层解释器都是CPython only,这也可以说是最有效的解释器:)在Python 3.3及更高版本中,您可以使用并查看
name
属性。该链接已失效,该调用不正确<代码>python_实现是正确的。