2009-07-09 48 views
10

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

回答

14

如果你正在运行的Jython

import platform 
platform.system() 

回报的Java'
here has some discussion,希望这有助于。

+1

+1:我喜欢当我学习一些新的python角落! – 2009-07-09 14:29:00

3

对于每个不同的环境,您都将拥有独特的settings.py。

您的开发settings.py不应该是您的QA /测试或生产settings.py。

我们做的是这样的。

我们有一个“主”settings.py,其中包含已安装的应用程序和其他不会有太大变化的项目。

我们有像settings_dev_win32.pysettings_qa_linux2.py和 “settings_co_linux2.py`名称等

每条这些特定的环境设置进口‘大师’的设置,然后覆盖之类的特定环境,文件DB驱动程序。由于每个设置文件对于某个环境都是唯一的,因此没有if语句并且没有检测到我们正在运行哪个环境。

生产(在Apache中使用mod_wsgi和mysql)使用settings_prod_linux2.py文件,而没有其他文件。

开发(在Windows中使用sqlite)使用settings_dev_win32.py文件。

19

由于sunqiang指出

import platform 
platform.system() 

作品的Jython 2.5,但是这不会对Jython的2.2(以前的Jython版本)工作。此外,还有一些关于在Jython 3.x中返回更多操作系统特定细节的讨论。什么也没有决定在那里,而是向前和向后兼容的安全,我会建议使用:

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

这将返回True对Jython和虚假其他地方(其实用Jython 2.2或以上它Jython和返回1 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以下不兼容,但是会向前兼容。

18

最明确的方法是:

进口平台

platform.python_implementation()

'CPython的'

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

相关问题