답변:
파이썬 모듈이 시스템에 설치되어 있는지 확인하는 방법 : 터미널에서 매우 쉬운 테스트를 수행 할 수 있습니다.
$ 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 --user
option 또는 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/except
ImportError
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 -q
null 로의 리디렉션을 불필요하게 만듭니다.
/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/
그러나 패키지가 설치되어 있지 않으면 자동입니다 (즉, 아무것도 반환하지 않습니다).