[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이 예제로 수행합니다.
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