답변:
파이썬 모듈이 시스템에 설치되어 있는지 확인하는 방법 : 터미널에서 매우 쉬운 테스트를 수행 할 수 있습니다.
$ python -c "import math"
$ echo $?
0 # math module exists in system
$ python -c "import numpy"
Traceback (most recent call last):
File "<string>", line 1, in <module>
ImportError: No module named numpy
$ echo $?
1 # numpy module does not exist in system
당신은 저장소에서 해당 패키지를 다운로드하여 특정 모듈을 설치할 수 있습니다, 예를 들어, 당신은 할 수 설치scipy 로,
sudo apt-get install python-scipy ## for Python2
sudo apt-get install python3-scipy ## for Python3
또는 아래 주석python-pip 에서 Zack Titan이 제안한대로 파이썬 모듈 을 설치할 수도 있습니다.numpy
pip install numpy
경고 : 높은 사용 만이 아니라 공식 우분투 저장소를 사용하여 파이썬 모듈을 설치하는 것이 좋습니다 pip같은 방법을 수퍼 유저 (로, 예 root또는 사용 sudo). 경우에 따라 시스템 파이썬을 손상시켜 시스템을 사용하지 못하게 될 수도 있습니다.
vpython하려면 다음과 같이 설치해야합니다.sudo apt-get install python-visual libgtkglextmm-x11-1.2-dev
sudo pip; 시스템 파이썬이 깨질 수 있습니다. apt-get을 사용하여 시스템 파이썬 용 패키지를 설치하십시오. pip --useroption 또는 virtualenv를 사용하여 Python 패키지를 직접 설치할 수 있습니다 .
경우에 우리는 불필요하게 (A에서 일어날 문제의 모듈 가져 오지 않는 try문) 우리가 사용 할 수 있습니다 sys.modules설치되어있는 모듈을 테스트 할 수 및 이전에 가져온합니다.
파이썬 쉘 문제에서 :
>>> import sys
그런 다음 설치된 모듈을 테스트하십시오.
>>> 'numpy' in sys.modules
True
>>> 'scipy' in sys.modules
False
이전에 가져온 모듈 만이 True테스트를 수행하면 다른 모든 모듈 (설치된 경우에도)은False.
파이썬 콘솔 try의 import명령문에 대한 또 다른 대안 은 내장 help()함수를 호출하는 것입니다. 이것은 설치되지 않은 모듈에 대한 문서를 제공하지 않습니다.
>>> help('scipy')
no Python documentation found for 'scipy'
설치된 모듈에 대한 매우 긴 도움말 문서의 출력은로 중단 될 수 있습니다 Q.
이제 누락 된 모듈을 설치하려면 루트 액세스가 필요하고 또한 Python-dependend 시스템이 엉망이되지 않도록 Ubuntu 패키지 관리 (Python pip 방식이 아님) 를 사용하는 것이 좋습니다 . 해당 모듈의 경우 다음과 같습니다.
sudo apt-get install python-scipy ## for Python2
sudo apt-get install python3-scipy ## for Python3
설치 후에는 한 sys.modules번 가져 와서 사전에 추가 할 수 있습니다 .
sys.modules 모듈 만 포함 하므로 모듈이 설치되었는지 테스트하는 신뢰할 수있는 방법이 아닙니다. 가장 신뢰할만한 테스트는 다른 사람들이 이미 제안했듯이 a을 사용하여 를 트랩하는 것 입니다. try/exceptImportError
sys.modules것은 전적으로 관련이 없으며 모듈에 대한 언급이 잘못되었다고 생각합니다. 하지만 어쩌면 그저 나일뿐입니다.
sys.modules여기에 어떤 도움도 없습니다.
다른 방법은 pkgutil모듈입니다. Python 2와 3에서 모두 작동합니다.
python -c 'import pkgutil; print(1 if pkgutil.find_loader("module") else 0)'
다음 module과 같이 모듈 이름 으로 바꿔야 합니다.
$ python -c 'import pkgutil; print(1 if pkgutil.find_loader("math") else 0)'
1
print()파이썬 2에서도 잘 작동합니다. 이것은 parens 그룹 구문으로 취급되며 부작용이 없습니다. 오직 당신이로 (여러 항목을 추가 할 print('a', 'b')때로 처리됩니다 tuple있는 당신이 필요합니까, from __future__ import print_function하지만이 경우에 적용되지 않습니다, 당신은 그냥 내 변화 테스트 (괄호를 추가하여 앞으로 호환 코드를 작성할 수 있습니다 Python 2와 3에서)
OP가 원래 Python을 시작한 후 솔루션을 요청했지만 Python 외부에서는을 사용한다는 것을 알고 있습니다 pip. 우분투에서 : sudo apt-get install python-pip아직 설치되어 있지 않은 경우.
그런 다음 사용 가능한 타사 모듈을 보려면 다음을 실행하십시오.
pip freeze
또는
pip list
그리고 둘 다 설치된 모든 모듈과 해당 버전을 보여줍니다.
찾고있는 모듈이 설치되어 있지 않은 경우 대부분 pip로 쉽게 설치할 수 있습니다.
pip install <module-name>
모듈이 존재하는지 또는 PyPI 이름이 무엇인지 확실하지 않은 경우 다음을 사용하십시오 pip search.
pip search <keyword>
pip show <module-name>패키지가 설치되어 있는지 여부를 표시합니다 (예 :) pip show numpy.
코드 try를 except블록 안에 넣을 수 있습니다.
$ python3 -c "\
try:
import cow
print('\nModule was installed')
except ImportError:
print('\nThere was no such module installed')"
There was no such module installed
$ python3 -c "\
try:
import regex
print('\nModule was installed')
except ImportError:
print('\nThere was no such module installed')"
Module was installed
완성을 위해 다른 답변을 제공하려면 다음을 수행하십시오.
-m옵션을 (ab) 사용할 수 있습니다 . 파이썬 맨 페이지에서 :
-m module-name
Searches sys.path for the named module and runs the correspond‐
ing .py file as a script.
우리에게 줄 것입니다 :
$ python2 -m numpy
/sbin/python2: No module named numpy.__main__; 'numpy' is a package and cannot be directly executed
$ python2 -m math
/sbin/python2: No code object available for math
그러나 존재하지 않는 모듈의 경우 다음을 제공합니다.
$ python2 -m doesnt_exist
/sbin/python2: No module named doesnt_exist
우리는 grep이것을 위해 사용할 수 있습니다 :
$ python2 -m doesnt_exist |& grep -q 'No module named' && echo 'Nope' || echo 'Yup'
Nope
$ python2 -m math |& grep -q 'No module named' && echo 'Nope' || echo 'Yup'
Yup
이것은 약간 해킹이며 -m의도 된 것이 아닙니다 . 그러나 빠른 테스트를 원한다면 가장 적은 타이핑이 필요한 방법입니다 :-)
grep -qnull 로의 리디렉션을 불필요하게 만듭니다.
/dev/null수년에 걸쳐 : - /
인프라 프로비저닝을 dem 등원으로 만들려면 oneliner의 셸에서 패키지를 확인할 수 있어야합니다. @cuonglm의 답변을 기반으로했습니다. 나는 반전했다 1하고 0내가 종료 상태를 생산보다는 문자열을 인쇄하고 있습니다 때문이다.
python -c "import sys, pkgutil; sys.exit(0 if pkgutil.find_loader(sys.argv[1]) else 1)" pymongo
sys.argv[1]패키지의 작은 따옴표로 바꿀 수 있지만 프로비저닝 스크립트의 경우 마지막에 읽을 수있는 것이 좋습니다.
python -c "import sys, pkgutil; sys.exit(0 if pkgutil.find_loader('pymongo') else 1)"
** chef , puppet 및 ansible에는 모두 파이썬 패키지 관리를위한 플러그인이 있지만 구식 버전을 사용하고 더 이상 사용되지 않는 플러그인을 사용하고 싶지 않은 상황과 같은 상황에 처할 수 있습니다.
특정 모듈을 찾기 위해 pydoc modules필터링 할 수있는를 사용할 수도 있습니다 grep. 출력은 열 형식으로 표시됩니다. 이 방법의 유일한 단점은 현재 작업 디렉토리에 파이썬 파일도 포함한다는 것입니다. 그럼에도 불구하고, 나는 대부분 그것을 직접 사용 하며이 관련 질문에 대해 많이 인용되는 접근법 중 하나입니다 : https://stackoverflow.com/q/739993/3701431
이 글을 쓰는 시점 pip show ...에서 가장 쉬운 방법 인 것 같습니다 :
https://pip.pypa.io/en/stable/reference/pip_show/
그러나 패키지가 설치되어 있지 않으면 자동입니다 (즉, 아무것도 반환하지 않습니다).