Могу ли я определить, работает ли мой код на cPython или Jython? - PullRequest
10 голосов
/ 09 июля 2009

Я работаю над небольшим проектом django, который позже будет развернут в контейнере сервлета. Но разработка намного быстрее, если я работаю с cPython вместо Jython. Поэтому я хочу проверить, работает ли мой код на cPython или Jython в моем файле settiings.py, чтобы я мог сказать ему использовать соответствующий драйвер БД (postgresql_psycopg2 или doj.backends.zxjdbc.postgresql). Есть ли простой способ сделать это?

Ответы [ 4 ]

22 голосов
/ 03 декабря 2012

Самый понятный способ:

платформа импорта

platform.python_implementation ()

'CPython'

По умолчанию в большинстве случаев основным интерпретатором является только CPython, который также, возможно, является наиболее эффективным:)

20 голосов
/ 18 июля 2009

Как указывал Саньцзян

import platform
platform.system()

работает для Jython 2.5, но не работает в Jython 2.2 (предыдущий выпуск Jython). Кроме того, было некоторое обсуждение о возвращении более специфических деталей операционной системы для вызовов, подобных этим, в Jython 3.x. Там ничего не решено, но для обеспечения совместимости в обратном и прямом направлениях я бы предложил использовать:

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

Который будет возвращать True для Jython и False везде (на самом деле в Jython 2.2 или более ранней версии он возвращает 1 для Jython и 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, но будет совместимой с предыдущими версиями.

16 голосов
/ 09 июля 2009

если вы используете Jython

import platform
platform.system()  

вернуть 'Java'
здесь есть обсуждение , надеюсь, это поможет.

3 голосов
/ 09 июля 2009

У вас будет уникальный файл settings.py для каждой среды.

Ваш файл settings.py для разработки не должен быть вашим QA / Test или производственным 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.

...