[python] 파이썬에서 조건부 모듈 가져 오기

내 프로그램에서 사용자가 사용하는 OS가 Windows인지 Linux인지에 따라 simplejson 또는 json을 가져오고 싶습니다. 사용자의 입력으로 OS 이름을 사용합니다. 이제 다음을 수행하는 것이 맞습니까?

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



답변

이 관용구가 많이 사용되는 것을 보았으므로 OS 스니핑을 할 필요조차 없습니다.

try:
    import json
except ImportError:
    import simplejson as json


답변

제목 의 질문에 대답 하지만 특정 사례 는 답변 하지 않으려면 완벽하게 맞습니다. 수 많은 패키지 가이 작업을 수행합니다. 사용자에 의존하는 대신 OS를 직접 파악하는 것이 좋습니다. pySerial이 예제로 수행합니다.

serial/__init__.py

import sys

if sys.platform == 'cli':
    from serial.serialcli import Serial
else:
    import os
    # chose an implementation, depending on os
    if os.name == 'nt':  # sys.platform == 'win32':
        from serial.serialwin32 import Serial
    elif os.name == 'posix':
        from serial.serialposix import Serial, PosixPollSerial, VTIMESerial  # noqa
    elif os.name == 'java':
        from serial.serialjava import Serial
    else:
        raise ImportError(
            "Sorry: no implementation for your platform ('{}') available".format(
                os.name
            )
        )

이것은 당신이 가정하고 특정 인터페이스 / 기능이있을 것이라는 강력한 보증이 필요한 경우에만 사용해야합니다 : 예를 들어 ‘file’ /dev/ttyX. 귀하의 경우 : JSON을 다루는 데 실제로 OS 관련이 없으며 패키지가 존재하는지 여부 만 확인하고 있습니다. 이 경우 try가져 와서 except실패하면 if로 대체하십시오.

try:
    import some_specific_json_module as json
except ImportError:
    import json


답변

json 또는 simplejson을 OS 플랫폼과 바인딩하는 데 사용하지 않는 것이 좋습니다. simplejson은 json의 최신 고급 버전이므로 먼저 가져와야합니다.

파이썬 버전을 기반으로 json 또는 simplejson을 가져 오는 방법을 시도 할 수 있습니다

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


답변