2010-08-16 21 views
73

En mi programa, quiero importar simplejson o json en función de si el sistema operativo en el que está el usuario es Windows o Linux. Tomo el nombre del sistema operativo como entrada del usuario. Ahora, ¿es correcto hacer lo siguiente?Importación condicional de módulos en Python

osys = raw_input("Press w for windows,l for linux") 
if (osys == "w"): 
    import json as simplejson 
else: 
    import simplejson 
+2

si esto es correcto. – akonsu

+25

¿Por qué toma el nombre del sistema operativo como entrada del usuario? Mire en el módulo de plataforma. http://docs.python.org/library/platform.html 'platform.platform()' o 'platform.system()' deberían hacer lo que necesites, en lugar de que un usuario tenga que ingresar algo cada vez que se codifique correr. –

+3

-1: pregunta al usuario por el sistema operativo. –

Respuesta

35

Perfectamente correcto, toneladas de paquetes hacen esto. Probablemente sea mejor averiguar el sistema operativo usted mismo en lugar de confiar en el usuario; aquí está pySerial haciéndolo como un ejemplo.

serial/__init__.py

import sys 

if sys.platform == 'cli': 
    from serialcli import * 
else: 
    import os 
    # chose an implementation, depending on os 
    if os.name == 'nt': #sys.platform == 'win32': 
     from serialwin32 import * 
    elif os.name == 'posix': 
     from serialposix import * 
    elif os.name == 'java': 
     from serialjava import * 
    else: 
     raise Exception("Sorry: no implementation for your platform ('%s') available" % os.name) 
+7

No, es muy incorrecto codificar nombres de sistema operativo para decidir si 'simplejson' o' json' está disponible. Está citando el código de * importaciones inherentemente específicas del sistema operativo *, que es un caso muy diferente. Vea la respuesta de Matt para el enfoque correcto. –

+10

@Glenn Maynard: Te lo agradecería entonces; Nunca he usado el paquete 'json' y estaba tratando de responder la pregunta más general" ¿puedes hacer importaciones condicionales de módulos? " –

125

que he visto este idioma utilizado mucho, por lo que ni siquiera tiene que hacer oler OS:

try: 
    import json 
except ImportError: 
    import simplejson as json 
+14

Primero debe intentar importar 'simplejson as json' ya que es probable que sea una versión más nueva (más rápida) del módulo' json' estándar. –

+0

o '' 'ujson''' para la velocidad – lababidi

3

No es recomendable el uso de obligar JSON o simplejson con plataforma OS. simplejson es la versión más nueva y avanzada de json, por lo que deberíamos intentar importarla primero.

Basado en la versión de Python que se puede tratar a continuación manera de importar JSON o simplejson

import sys 
if sys.version_info > (2, 7): 
    import simplejson as json 
else: 
    import json 
Cuestiones relacionadas