파이썬 모듈을 가져 오지 않고 존재하는지 알아야합니다.
존재하지 않는 항목 가져 오기 (원하는 항목이 아님) :
try:
import eggs
except ImportError:
pass
답변
파이썬 2
import가 python2에서 무언가를 찾을 수 있는지 확인하려면 다음을 사용하십시오. imp
import imp
try:
imp.find_module('eggs')
found = True
except ImportError:
found = False
점선으로 된 수입품을 찾으려면 다음을 수행해야합니다.
import imp
try:
spam_info = imp.find_module('spam')
spam = imp.load_module('spam', *spam_info)
imp.find_module('eggs', spam.__path__) # __path__ is already a list
found = True
except ImportError:
found = False
pkgutil.find_loader
python3 부분과 거의 동일하거나 더 많이 사용할 수 있습니다
import pkgutil
eggs_loader = pkgutil.find_loader('eggs')
found = eggs_loader is not None
파이썬 3
Python3 ≤ 3.3
를 사용해야합니다 importlib
.이 작업을 수행 한 방법은 다음과 같습니다.
import importlib
spam_loader = importlib.find_loader('spam')
found = spam_loader is not None
내 기대는 로더를 찾을 수 있다면 존재한다는 것입니다. 어떤 로더를 수용할지 필터링하는 것과 같이 좀 더 똑똑 할 수도 있습니다. 예를 들면 다음과 같습니다.
import importlib
spam_loader = importlib.find_loader('spam')
# only accept it as valid if there is a source file for the module - no bytecode only.
found = issubclass(type(spam_loader), importlib.machinery.SourceFileLoader)
Python3 ≥ 3.4
Python3.4에서는 importlib.find_loader
파이썬 문서 가 더 이상 사용되지 않습니다 importlib.util.find_spec
. 권장되는 방법은 importlib.util.find_spec
입니다. 같은 다른 importlib.machinery.FileFinder
파일이 있는데, 특정 파일을로드 한 후에 유용합니다. 그것들을 사용하는 방법을 알아내는 것은 이것의 범위를 벗어납니다.
import importlib
spam_spec = importlib.util.find_spec("spam")
found = spam_spec is not None
이것은 상대 수입에도 적용되지만 시작 패키지를 제공해야하므로 다음을 수행 할 수도 있습니다.
import importlib
spam_spec = importlib.util.find_spec("..spam", package="eggs.bar")
found = spam_spec is not None
spam_spec.name == "eggs.spam"
나는 이것을하는 이유가 있다고 확신하지만 그것이 무엇인지 잘 모르겠습니다.
경고
하위 모듈을 찾으려고 할 때 상위 모듈을 가져옵니다 ( 위의 모든 방법에 대해)!
food/
|- __init__.py
|- eggs.py
## __init__.py
print("module food loaded")
## eggs.py
print("module eggs")
were you then to run
>>> import importlib
>>> spam_spec = importlib.find_spec("food.eggs")
module food loaded
ModuleSpec(name='food.eggs', loader=<_frozen_importlib.SourceFileLoader object at 0x10221df28>, origin='/home/user/food/eggs.py')
이 문제를 해결하는 것에 대한 의견
감사의 말
- importlib에 대한 @rvighne
- 파이썬 3.3 이상에서 @ lucas-guido
find_loader
- Python2.7의 pkgutils.find_loader 동작에 대한 @enpenax
답변
yarbelk의 응답을 사용한 후에는 import하지 않아도되도록했습니다 ìmp
.
try:
__import__('imp').find_module('eggs')
# Make things with supposed existing module
except ImportError:
pass
장고에서 유용합니다 settings.py
.
답변
파이썬 3> = 3.6 : ModuleNotFoundError
은 Python 3.6ModuleNotFoundError
에 도입 되었으며이 목적으로 사용할 수 있습니다
try:
import eggs
except ModuleNotFoundError:
# Error handling
pass
모듈 또는 상위 모듈 중 하나를 찾을 수없는 경우 오류가 발생 합니다. 그래서
try:
import eggs.sub
except ModuleNotFoundError as err:
# Error handling
print(err)
외모가 좋아하는 메시지를 인쇄 할 No module named 'eggs'
경우 생성 eggs
모듈을 찾을 수 없습니다를; 그러나 모듈 No module named 'eggs.sub'
만 sub
찾을 수 없지만 eggs
패키지를 찾을 수 있는 경우 와 같은 것을 인쇄합니다 .
참조 가져 오기 시스템 설명서를 .ModuleNotFoundError
답변
ImportError에 의존하지 않는 Python 2
현재 답변이 업데이트 될 때까지 Python 2 의 길은 다음과 같습니다.
import pkgutil
import importlib
if pkgutil.find_loader(mod) is not None:
return importlib.import_module(mod)
return None
왜 또 다른 대답?
많은 답변이을 잡는 것을 사용합니다 ImportError
. 그것의 문제는 우리가 무엇을 던지는 지 알 수 없다는 것입니다.ImportError
입니다.
당신이 가져 오는 경우 존재하지 않는 모듈을하고있을 발생 ImportError
(예 : 오타 라인 1) 귀하의 모듈을, 결과는 모듈이 존재하지 않는다고 할 것이다. 모듈이 존재하고 ImportError
잡히고 자동으로 실패하는 것을 파악하기 위해서는 상당한 양의 역 추적이 필요합니다 .
답변
하나의 라이너로서의 go_as의 답변
python -c "help('modules');" | grep module
답변
커맨드 라인 에서 모듈이로드되었는지 확인하는 방법을 찾고있는 동안이 질문을 보았고 나에게 오는 모듈에 대한 내 생각을 공유하고 싶습니다.
Linux / UNIX 스크립트 파일 방법 : 파일 작성 module_help.py
:
#!/usr/bin/env python
help('modules')
그런 다음 실행 파일인지 확인하십시오. chmod u+x module_help.py
그리고 그것을 전화 pipe
로 grep
:
./module_help.py | grep module_name
내장 된 도움말 시스템을 호출하십시오 . (이 기능은 대화식으로 사용하기위한 것입니다 .) 인수가 없으면 대화식 도움말 시스템이 인터프리터 콘솔에서 시작됩니다. 인수가 string 인 경우, 문자열은 모듈 , 함수, 클래스, 메소드, 키워드 또는 문서 주제 의 이름으로 조회되고 도움말 페이지가 콘솔에 인쇄됩니다. 인수가 다른 종류의 객체 인 경우 객체의 도움말 페이지가 생성됩니다.
대화식 방법 : 콘솔로드python
>>> help('module_name')
q
python 대화식 세션을 종료하려면 Ctrl+ 를 눌러 독서 를 종료하면D
Windows 스크립트 파일 방법 은 Linux / UNIX와 호환되며 전체적으로 더 좋습니다 .
#!/usr/bin/env python
import sys
help(sys.argv[1])
명령에서 다음과 같이 호출하십시오.
python module_help.py site
출력 :
모듈 사이트에 대한 도움말 :
NAME
site-타사 패키지의 모듈 검색 경로를 sys.path에 추가합니다.
FILE
/usr/lib/python2.7/site.py
MODULE DOCS
http://docs.python.org/library/site
DESCRIPTION
…
:
q
대화식 모드를 종료 하려면을 눌러야 합니다.
알 수없는 모듈 사용 :
python module_help.py lkajshdflkahsodf
출력 :
‘lkajshdflkahsodf’에 대한 Python 설명서가 없습니다.
종료합니다.