Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/302.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我可以检测我的代码是在cPython还是Jython上运行吗?_Python_Django_Jython - Fatal编程技术网

我可以检测我的代码是在cPython还是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

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

如果您正在运行Jython

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_实现是正确的。