2009-07-09 20 views
10

Estoy trabajando en un pequeño proyecto django que se implementará en un contenedor de servlets más adelante. Pero el desarrollo es mucho más rápido si trabajo con cPython en lugar de Jython. Entonces, lo que quiero hacer es probar si mi código se está ejecutando en cPython o Jython en mi settiings.py, así que puedo decirle que use el controlador apropiado de db (postgresql_psycopg2 o doj.backends.zxjdbc.postgresql). ¿Hay una manera simple de hacer esto?¿Puedo detectar si mi código se está ejecutando en cPython o Jython?

Respuesta

14

si se está ejecutando Jython

import platform 
platform.system() 

retorno 'Java'
here has some discussion, espero que esto ayude.

+1

+1: Me encanta cuando conozco alguna nueva esquina de python. –

3

Tendrá settings.py únicos para cada entorno diferente.

Su configuración de desarrollo no debe ser su QA/Test o producción settings.py.

Lo que hacemos es esto.

Tenemos un "maestro" settings.py que contiene las aplicaciones instaladas y otros elementos que no cambian mucho.

Tenemos archivos específicos del entorno con nombres como settings_dev_win32.py y settings_qa_linux2.py y 'settings_co_linux2.py`, etc.

Cada una de estas configuraciones específicas del entorno importa la configuración del 'maestro', y luego anula cosas como el Controlador de DB. Como cada archivo de configuración es exclusivo de un entorno, no hay instrucciones if y no detecta en qué entorno estamos trabajando.

La producción (en Apache, usando mod_wsgi y mysql) utiliza el archivo settings_prod_linux2.py y no otro.

Desarrollo (en Windows utilizando sqlite) utiliza el archivo settings_dev_win32.py.

19

Como sunqiang señaló

import platform 
platform.system() 

obras de Jython 2.5, pero esto no funciona en Jython 2.2 (la versión anterior Jython). Además, se ha debatido la posibilidad de devolver más detalles específicos del sistema operativo para llamadas como estas en Jython 3.x. Nada se ha decidido que no, pero para ser segura hacia atrás y hacia delante compatibles, se recomienda usar:

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

que devolverá True para Jython y falso en cualquier otro lugar (en realidad en Jython 2.2 o anterior devuelve 1 para Jython y 0 en cualquier otro lado, pero esto funcionará bien en las declaraciones if y otras verificaciones). Esta llamada funciona en Jython al menos tan atrás como 2.1, y funcionará en el futuro previsible.

En las versiones de Python 2.6 o superior (tenga en cuenta Jython 2.6 aún no ha sido puesto en libertad), otra opción es:

import platform 
platform.python_implementation 

que devuelve 'CPython' para la aplicación C de Python, 'IronPython' para IronPython y voluntad devuelve 'Jython' para Jython. Obviamente, este no es compatible con versiones anteriores por debajo de 2.6, pero será compatible con versiones anteriores.

18

La mayoría de la manera clara es:

plataforma de importación

platform.python_implementation()

'CPython'

De forma predeterminada, la mayoría de las veces el intérprete subyacente es CPython, que también es posiblemente el más eficiente :)

Cuestiones relacionadas