後でサーブレット コンテナーにデプロイされる小さな django プロジェクトに取り組んでいます。しかし、Jython の代わりに cPython を使用すると、開発ははるかに高速になります。そこで、コードが cPython または Jython で実行されているかどうかを、settiings.py でテストして、適切な db ドライバー (postgresql_psycopg2 または doj.backends.zxjdbc.postgresql) を使用するように指示できるようにする必要があります。これを行う簡単な方法はありますか?
5 に答える
最も明確な方法は次のとおりです。
輸入プラットフォーム
platform.python_implementation()
「CPython」
デフォルトでは、ほとんどの場合、基礎となるインタープリターは CPython のみであり、これは間違いなく最も効率的なものでもあります:)
sunqiangが指摘したように
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ステートメントやその他のチェックでは引き続き正常に機能します)。この呼び出しは、少なくとも2.1までさかのぼってJythonで機能し、近い将来に機能します。
Pythonバージョン2.6以降(Jython 2.6はまだリリースされていないことに注意してください)では、別のオプションは次のとおりです。
import platform
platform.python_implementation
これは、PythonのC実装の場合は「CPython」を返し、IronPythonの場合は「IronPython」を返し、Jythonの場合は「Jython」を返します。明らかに、これは2.6より前では下位互換性がありませんが、上位互換性があります。
さまざまな環境ごとに固有のsettings.pyがあります。
開発settings.pyは、QA/テストまたは本番環境settings.pyであってはなりません。
私たちがしているのはこれです。
インストールされたアプリやあまり変更されないその他のアイテムを含む「マスター」settings.pyがあります。
settings_dev_win32.py
andsettings_qa_linux2.py
や'settings_co_linux2.py`などの 名前の環境固有のファイルがあります。
これらの環境固有の設定はそれぞれ、「マスター」設定をインポートしてから、DBドライバーなどをオーバーライドします。各設定ファイルは環境に固有であるため、ifステートメントはなく、実行中の環境を検出することもできません。
本番環境(Apacheではmod_wsgiとmysqlを使用)はsettings_prod_linux2.py
ファイルを使用し、他のファイルは使用しません。
開発(Windowsではsqliteを使用)はsettings_dev_win32.py
ファイルを使用します。