Я работаю над небольшим проектом django, который позже будет развернут в контейнере сервлетов. Но разработка выполняется намного быстрее, если я работаю с cPython вместо Jython. Поэтому я хочу проверить, работает ли мой код на cPython или Jython в моем файле settiings.py, поэтому я могу сказать, что он использует соответствующий драйвер db (postgresql_psycopg2 или doj.backends.zxjdbc.postgresql). Есть ли простой способ сделать это?
Могу ли я определить, работает ли мой код на cPython или Jython?
Ответ 1
если вы используете Jython
import platform
platform.system()
return 'Java'
здесь есть обсуждение, надеюсь, что это поможет.
Ответ 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
.