파이썬에 모듈이 설치되어 있는지 확인하고 필요한 경우 어떻게 설치합니까?


89

터미널에서 파이썬을 시작한 후 파이썬에 모듈이 무엇인지 어떻게 알 수 있습니까? NumPy 및 SciPy 모듈을 학습해야한다고 가정하십시오.

  • 설치되어 있지 않은 경우 어떻게 설치합니까?
  • 이미 설치되어 있는지 어떻게 알 수 있습니까?

답변:


73

파이썬 모듈이 시스템에 설치되어 있는지 확인하는 방법 : 터미널에서 매우 쉬운 테스트를 수행 할 수 있습니다.

$ 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). 경우에 따라 시스템 파이썬을 손상시켜 시스템을 사용하지 못하게 될 수도 있습니다.

pip로컬 가상 환경으로 사용하여 패키지를 설치하는 방법


귀하의 답변과 같이 수학 모듈이 존재하고 numby에 대해 역 추적이 나타나지 않았고 echo $? 출력은 0이었습니다. 시스템에 numpy도 있음을 의미합니까?
TechJhola

1
예, 시스템에 있습니다.
souravc

numpy 모듈이없는 경우 어떻게 가져올 수 있습니까? 코딩을 할 때 numpy import *에서 import 문을 호출하면 모듈을 설치합니까? 그렇지 않은 경우 새 모듈을 어떻게 설치합니까?
TechJhola

1
모듈 설치 방법에 대해서는 별도의 질문이 될 것입니다. 모듈마다 다른 패키지가 필요합니다. 예를 들어 설치 vpython하려면 다음과 같이 설치해야합니다.sudo apt-get install python-visual libgtkglextmm-x11-1.2-dev
souravc

1
사용하지 마십시오 sudo pip; 시스템 파이썬이 깨질 수 있습니다. apt-get을 사용하여 시스템 파이썬 용 패키지를 설치하십시오. pip --useroption 또는 virtualenv를 사용하여 Python 패키지를 직접 설치할 수 있습니다 .
jfs

21

경우에 우리는 불필요하게 (A에서 일어날 문제의 모듈 가져 오지 않는 try문) 우리가 사용 할 수 있습니다 sys.modules설치되어있는 모듈을 테스트 할 수 이전에 가져온합니다.

파이썬 쉘 문제에서 :

>>> import sys

그런 다음 설치된 모듈을 테스트하십시오.

>>> 'numpy' in sys.modules
True
>>> 'scipy' in sys.modules
False

이전에 가져온 모듈 만이 True테스트를 수행하면 다른 모든 모듈 (설치된 경우에도)은False.

파이썬 콘솔 tryimport명령문에 대한 또 다른 대안 은 내장 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번 가져 와서 사전에 추가 할 수 있습니다 .


1
나는 이것이 가장 파이썬적인 답변이라고 생각합니다 ....
Grijesh Chauhan

3
이 중 첫 번째 부분은 잘못 되었습니다. 이미 가져온sys.modules 모듈 만 포함 하므로 모듈이 설치되었는지 테스트하는 신뢰할 수있는 방법이 아닙니다. 가장 신뢰할만한 테스트는 다른 사람들이 이미 제안했듯이 a을 사용하여 를 트랩하는 것 입니다. try/exceptImportError
ekhumoro 2019

@ ekhumoro-고마워, 나는 그것을 명확하게하기 위해 대답을 편집 할 것입니다.
Takkat

4
여전히 명확하지 않은 것 같습니다. 모듈이 설치되어 있는지 ( imported 아님) 확인하는 방법을 묻는 질문이 있다는 sys.modules것은 전적으로 관련이 없으며 모듈에 대한 언급이 잘못되었다고 생각합니다. 하지만 어쩌면 그저 나일뿐입니다.
David Z

1
sys.modules여기에 어떤 도움도 없습니다.
고양이

19

다른 방법은 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

2
나는 당신이 내 변화의 일부를 모르는 것을 보았습니다. print()파이썬 2에서도 잘 작동합니다. 이것은 parens 그룹 구문으로 취급되며 부작용이 없습니다. 오직 당신이로 (여러 항목을 추가 할 print('a', 'b')때로 처리됩니다 tuple있는 당신이 필요합니까, from __future__ import print_function하지만이 경우에 적용되지 않습니다, 당신은 그냥 내 변화 테스트 (괄호를 추가하여 앞으로 호환 코드를 작성할 수 있습니다 Python 2와 3에서)
Martin Tournoij

@Carpetsmoker : 지적 해 주셔서 감사합니다. 이전 버전으로 롤백합니다.
cuonglm

이것은 좋은 대답입니다. 쉘 스크립트 흐름 제어를 위해 종료 / 상태 코드를 반환하고 모듈 이름을 명령 줄 인수로 사용하는 파생 답변을 추가했습니다. askubuntu.com/a/891384/146273
Bruno Bronosky

작동했습니다! - exit쉘 컨텍스트에서 사용할 수 있도록 다음으로 변경하십시오 .python -c 'import pkgutil; exit(0 if pkgutil.find_loader("math") else 2)'
AT

12

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>

1
또한 pip show <module-name>패키지가 설치되어 있는지 여부를 표시합니다 (예 :) pip show numpy.
헤르페스 무료 엔지니어

10

코드 tryexcept블록 안에 넣을 수 있습니다.

$ 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

6

완성을 위해 다른 답변을 제공하려면 다음을 수행하십시오.

-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의도 된 것이 아닙니다 . 그러나 빠른 테스트를 원한다면 가장 적은 타이핑이 필요한 방법입니다 :-)


4
grep -qnull 로의 리디렉션을 불필요하게 만듭니다.
muru

3
@muru Yikes! 나는에 쓸모 리디렉션을 많이 입력 한 /dev/null수년에 걸쳐 : - /
마틴 Tournoij

4

파이썬으로 예제를 작성했습니다.

import pip
import sys
from bigml.api import BigML


if not 'bigml' in sys.modules.keys():
    pip.main(['install', 'bigml'])

3

셸 oneliner 검사 (프로비저닝에 유용)

인프라 프로비저닝을 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 , puppetansible에는 모두 파이썬 패키지 관리를위한 플러그인이 있지만 구식 버전을 사용하고 더 이상 사용되지 않는 플러그인을 사용하고 싶지 않은 상황과 같은 상황에 처할 수 있습니다.


1

특정 모듈을 찾기 위해 pydoc modules필터링 할 수있는를 사용할 수도 있습니다 grep. 출력은 열 형식으로 표시됩니다. 이 방법의 유일한 단점은 현재 작업 디렉토리에 파이썬 파일도 포함한다는 것입니다. 그럼에도 불구하고, 나는 대부분 그것을 직접 사용 하며이 관련 질문에 대해 많이 인용되는 접근법 중 하나입니다 : https://stackoverflow.com/q/739993/3701431


0

우분투 쉘에서 기본적으로 bash는 다음과 같이 간단합니다.

pip list | grep <package-name-Case-Matters>

pip list | grep pywinrm

pip list | grep numpy

그리고 사건에 대해 의심이 든다면 (모든 패키지 이름이 항상 소문자라고 생각하지만)

pip list | grep [Nn]um[Pp]y  # it works with numpy, Numpy, numPy, and NumPy

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.