Могу ли я определить, работает ли мой код на cPython или Jython?

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

Ответ 2

Самый простой способ:

  

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

         

platform.python_implementation()

  

'CPython'

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

Ответ 3

Как отметил Sunqiang

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 везде, но это все равно будет работать в случае, если инструкции и другие проверки). Этот вызов работает в Jython по крайней мере еще в 2.1 и будет работать в обозримом будущем.

В версиях Python версии 2.6 или выше (примечание Jython 2.6 еще не выпущено), другой вариант:

import platform
platform.python_implementation

Что возвращает "CPython" для C-реализации Python, "IronPython" для IronPython и вернет "Jython" для Jython. Очевидно, что это не совместимо с предыдущими версиями ниже 2.6, но будет совместимо с первыми.

Ответ 4

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

Ваша настройка settings.py не должна быть параметром QA/Test или production.py.

Мы делаем это.

У нас есть "master" settings.py, который содержит установленные приложения и другие элементы, которые не сильно меняются.

У нас есть файлы, зависящие от среды с именами типа settings_dev_win32.py и settings_qa_linux2.py и 'settings_co_linux2.py` и т.д.

Каждая из этих настроек среды импортирует настройки "master", а затем переопределяет такие вещи, как драйвер DB. Поскольку каждый файл настроек является уникальным для среды, нет if-statement и не обнаруживает, в какой среде мы работаем.

Производство (в Apache, используя mod_wsgi и mysql) использует файл settings_prod_linux2.py и не имеет другого.

Разработка (в Windows с использованием sqlite) использует файл settings_dev_win32.py.

Ответ 5

В Python 3.3 и выше вы можете использовать sys.implementation и посмотреть на атрибут name.