13

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

4

5 回答 5

36

最明确的方法是:

进口平台

platform.python_implementation()

'CPython'

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

于 2012-12-03T12:10:53.303 回答
24

正如孙强所指出的

import platform
platform.system()

适用于 Jython 2.5,但这不适用于 Jython 2.2(以前的 Jython 版本)。此外,还有一些关于在 Jython 3.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,但将向前兼容。

于 2009-07-18T14:01:38.170 回答
15

如果您正在运行 Jython

import platform
platform.system()  

return 'Java'
here 有一些讨论,希望这会有所帮助。

于 2009-07-09T12:22:41.117 回答
3

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

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

我们要做的就是这个。

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

我们有特定于环境的文件,其名称类似于settings_dev_win32.pyandsettings_qa_linux2.py和 'settings_co_linux2.py` 等。

这些特定于环境的设置中的每一个都导入“主”设置,然后覆盖诸如 DB 驱动程序之类的东西。由于每个设置文件对于环境都是唯一的,因此没有 if 语句,也无法检测我们在哪个环境中运行。

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

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

于 2009-07-09T12:53:18.443 回答
3

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

于 2019-07-28T09:04:43.043 回答