2009-07-09 15 views
10

私は後でサーブレットコンテナにデプロイされる小さなdjangoプロジェクトに取り組んでいます。しかし、Jythonの代わりにcPythonを使って作業すると、開発がはるかに高速になります。だから、私のコードがcPythonやJythonでsettiings.pyで動いているかどうかをテストしたいので、適切なdbドライバ(postgresql_psycopg2またはdoj.backends.zxjdbc.postgresql)を使用するように指示することができます。これを行う簡単な方法はありますか?コードがcPythonまたはJython上で実行されているかどうかを検出できますか?

答えて

14

あなたはJythonの

import platform 
platform.system() 

リターン "Javaの
here has some discussionを実行している場合、このことができます願っています。

+1

+1:新しいPythonコーナーについて学ぶと大好きです! –

3

異なる環境ごとに固有のsettings.pyがあります。

あなたの開発settings.pyはあなたのQA/Testまたはproduction settings.pyであってはなりません。

これは何ですか。

私たちには、インストールされているアプリやその他の変更の少ない項目が含まれている「マスター」settings.pyがあります。

私たちは、これらの環境固有の設定のそれぞれが 『マスター』の設定をインポートし、その後のようなものを上書きします

など、settings_dev_win32.pysettings_qa_linux2.pyと 「settings_co_linux2.py`のような名前の環境固有のファイルを持っていますDBドライバ。各設定ファイルは環境固有のものであるため、if文がなく、実行中の環境が検出されません。

Production(Apacheでは、mod_wsgiとmysqlを使用)はsettings_prod_linux2.pyファイルを使用します。

開発(Windowsのsqliteを使用)はsettings_dev_win32.pyファイルを使用します。 sunqiangとして

19

はJythonの2.5

import platform 
platform.system() 

作品を指摘したが、これはJythonの2.2(以前のJythonリリース)上では動作しません。また、Jython 3.xのように、オペレーティングシステム固有の詳細情報を返す方法についても議論がありました。何も決まっていないされていますが、安全に前後に互換性があるように、私が使用することをお勧めします:

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

他のどこでもJythonのためのTrueとFalseを返しますどの(実際のJython 2.2歳以上ではJythonのために1を返し、 0を指定していますが、これはif文やその他のチェックでは正常に動作します)。この呼び出しは少なくとも少なくとも2.1まではJythonで動作し、近い将来に動作します。 Pythonのバージョン2.6以上で

(Jythonの2.6はまだリリースされていない注意してください)別のオプションです:

、パイソンのC実装は 'はCPython' を返しますIronPythonのための 'IronPythonの' となります
import platform 
platform.python_implementation 

Jythonのために 'Jython'を返します。明らかに、これは2.6より下位互換性はありませんが、転送互換性があります。

18

最も明確な方法がある:

インポート・プラットフォーム

platform.python_implementation()

'CPythonの'

デフォルトでは、基礎となるインタプリタはCPythonだけで、おそらく最も効率的なものです。

関連する問題