2009-07-09 50 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,這也可以說是最有效的:)

相關問題