在Python中有条件地导入模块

时间:2010-08-16 19:28:30

标签: python

在我的程序中,我想根据用户所使用的操作系统是Windows还是Linux来导入simplejson或json。我将操作系统名称作为用户的输入。现在,执行以下操作是否正确?

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

3 个答案:

答案 0 :(得分:159)

我已经看到这个习惯用法很多,所以你甚至不需要做OS操作嗅探:

try:
    import json
except ImportError:
    import simplejson as json

答案 1 :(得分:47)

完全正确,大量的包裹可以做到这一点。最好自己弄清楚操作系统,而不是依赖于用户;这里以pySerial为例。

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)

答案 2 :(得分:6)

建议不要将json或simplejson与OS平台绑定。 simplejson是json的新版本和高级版本,所以我们应该先尝试导入它。

基于python版本,您可以尝试以下方式导入json或simplejson

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