我正在研究一个稍后将部署在servlet容器中的小型django项目。但是如果我使用cPython而不是Jython,开发会快得多。所以我想要做的是测试我的代码是否在我的settiings.py中的cPython或Jython上运行,所以我可以告诉它使用适当的db驱动程序(postgresql_psycopg2或doj.backends.zxjdbc.postgresql)。有一种简单的方法可以做到这一点吗?
答案 0 :(得分:22)
最明确的方式是:
导入平台
platform.python_implementation()
'CPython的'
默认情况下,大多数时候底层解释器只是CPython,也可以说是最有效的解释器:)
答案 1 :(得分:20)
孙全强指出
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
对于C的C实现返回'CPython',为IronPython返回'IronPython',并为Jython返回'Jython'。显然,这个在2.6以下不向后兼容,但将向前兼容。
答案 2 :(得分:15)
答案 3 :(得分:3)
每个不同的环境都有唯一的settings.py.
您的开发settings.py不应该是您的质量保证/测试或生产settings.py。
我们做的是这个。
我们有一个“master”settings.py,其中包含已安装的应用和其他没有太大变化的项目。
我们有特定于环境的文件,其名称为settings_dev_win32.py
和settings_qa_linux2.py
'settings_co_linux2.py`等
这些特定于环境的设置中的每一个都会导入“主”设置,然后覆盖数据库驱动程序等内容。由于每个设置文件对于环境都是唯一的,因此没有if语句,也没有检测到我们正在运行的环境。
生产(在Apache中,使用mod_wsgi和mysql)使用settings_prod_linux2.py
文件而不使用其他文件。
开发(在Windows中使用sqlite)使用settings_dev_win32.py
文件。
答案 4 :(得分:0)
在Python 3.3及更高版本中,您可以使用sys.implementation并查看;WITH CTEContacts AS
( SELECT DISTINCT ContactEmail,
ContactActive
FROM Contacts
)
SELECT ContactEmail,
ContactActive,
ISNULL(STUFF((SELECT DISTINCT
', ' + CAST(Contacts.CompanyId AS NVARCHAR(3))
FROM Contacts
WHERE Contacts.ContactEmail = CTEContacts.ContactEmail
FOR xml PATH ('')), 1, 2, ''), '') AS CompanyId,
ISNULL(STUFF((SELECT DISTINCT
', ' + CAST([Services].ServiceName AS NVARCHAR(50))
FROM [Services]
JOIN Companies
ON [Services].CompanyId = Companies.CompanyId
JOIN Contacts
ON Contacts.ContactEmail = CTEContacts.ContactEmail
AND Contacts.CompanyId = Companies.CompanyId
WHERE Contacts.ContactEmail = CTEContacts.ContactEmail
FOR xml PATH ('')), 1, 2, ''), '') AS ServiceName
FROM CTEContacts
ORDER BY CTEContacts.ContactEmail
属性。