파이썬 코드를 작성하다 보면 특정 모듈이 시스템에 설치되어 있는지 확인해야 하는 경우가 있습니다. 이때 실제로 모듈을 임포트하면 부작용(side effect)이 발생할 수 있기 때문에, 임포트 없이 모듈의 존재 여부만 확인하는 것이 안전합니다. 상황별로 사용할 수 있는 몇 가지 방법을 소개합니다.
1. imp 모듈과 try...except 활용하기 (Python 2)
파이썬 2 환경에서는 imp 모듈의 find_module() 함수를 try...except 문과 함께 사용하면 간단하게 확인할 수 있습니다.
import imp
try:
imp.find_module('eggs')
found = True
except ImportError:
found = False
print found위 코드는 'eggs'라는 모듈이 설치되어 있지 않은 경우 다음과 같은 결과를 출력합니다.
False
2. pkgutil의 iter_modules로 전체 모듈 목록 조회하기
pkgutil 모듈의 iter_modules() 함수를 사용하면 시스템에 설치된 모든 모듈을 순회하면서 원하는 모듈이 존재하는지 검사할 수 있습니다.
from pkgutil import iter_modules
def module_exists(module_name):
return module_name in (name for loader, name, ispkg in iter_modules())
print module_exists('scrapy')'scrapy' 모듈이 설치되어 있다면 다음과 같은 결과가 출력됩니다.
True
이 예제에서 True가 출력된 이유는 해당 모듈이 실행 환경(PC)에 이미 설치되어 있기 때문입니다.
3. 셸(터미널)에서 빠르게 확인하기
코드 내부가 아니라 단순히 터미널에서 모듈 설치 여부만 확인하고 싶다면 아래 명령어를 사용할 수 있습니다.
python -c "help('modules');" | grep yourmodule이 명령은 파이썬이 인식하는 전체 모듈 목록을 출력한 뒤, grep으로 원하는 모듈명과 일치하는 항목만 필터링해 보여줍니다. 일치하는 결과가 없으면 모듈이 설치되어 있지 않다고 판단할 수 있습니다.
참고: Python 3에서의 권장 방법
파이썬 3부터는 imp 모듈이 더 이상 권장되지 않으며(deprecated), 대신 importlib.util.find_spec()을 사용하는 것이 표준적인 방법입니다.
import importlib.util
found = importlib.util.find_spec('eggs') is not None
print(found)이 방법은 모듈을 실제로 로드하지 않으면서도 존재 여부를 정확하게 확인할 수 있어, 최신 파이썬 프로젝트에서 가장 많이 사용됩니다.