python3에 모듈 또는 패키지가 이미 설치되어 있는지 확인하는 방법은 무엇입니까?


10

프로그램이 실행되기 전에 설치되었는지 확인해야합니다.


2
그냥 실행하십시오 pip install. 이미 설치되어 있으면 다시 설치되지 않습니다.
jordanm

jordanm을 생각하지만, ao / p를 확인하고 테스트해야합니다.
hubatrix

답변:


3

쉘을 입력하십시오 : pydoc modules.
그러면 모듈이 나열되고 원하는 모듈을 잡을 수 있습니다.
stackoverflow 에서 발견되었습니다 .


11

설치된 패키지 만 나열하는 grep과 함께 piplist명령을 사용해야 합니다 (모든 모듈 및 인접 패키지도 포함되지 않음).

pip list | grep -F package_name

package_name이 설치된 여러 패키지와 일치하는 경우 (예 : boto언제 설치되어 있는지 검색하는 경우 botocore) @TaraPrasadGurung이 제안한대로 -w대신 대신 -F사용할 수 있습니다. -w패키지 이름에 공통적 인 문자가 단어 경계로 표시되므로 정확한 패키지가 표시되지 않습니다 . 그래서 당신은 당신이있는 경우 requestsrequests-cache설치하거나 ruamel.yaml및 ruamel.yaml.cmd`와 필요가 정확하게 출력의 한 줄은 당신이 좋아하는 일을 할 필요가 :

pip list --disable-pip-version-check | grep -E "^ruamel\.yaml "

.사용할 때 모든 문자와 일치하므로 -E이스케이프해야합니다 .¹


¹ 그리고 패키지가 있으므로 필요합니다 ruamel_yaml. pip네임 스페이스 패키지를 다룰 때 모든 패키지 관리자가 호환되는 것은 아닙니다 .


패키지 이름 boto 및 botocore가 설치되어 있으면 둘 다 나열됩니다. 따라서 더 나은 솔루션은 -F 대신 -w 플래그를 사용하여 정확한 패키지를 나열하는 것입니다.
Tara Prasad Gurung

@TaraPrasadGurung 비록 출력을 다소 줄이는 데 도움이 될 수 있지만 주장하는대로 정확한 패키지를 얻는 데 도움이되지는 않습니다. 예를 들어 도트와 대시는 -w단어 경계로 사용되며 패키지 이름에서 일반적입니다. 나는 당신의 제안하여 사용할 때 여러 개의 일치를 얻을 grep -w ruamel.yaml또는grep -w request
안톤

pip list | grep -F mxnet-cu101mxnet-cu101 1.5.0정확하게 설치되는 위치는 아니지만 인쇄합니다 . 설치된 경로를 얻는 방법을 알고 있습니까? `
Anu

@ any 예, 파이썬 패키지가 설치된 위치를 검색하는 방법에 대한 좋은 아이디어가 있습니다. U & L에 새로 게시 된 질문을 따르지 않기 때문에이 사이트에 질문을 게시하고 관심을 끌기 위해 여기에 핑을 보내야합니다.
Anthon

4

패키지가 가져 오기에서 미쳤거나 시간이 많이 걸리지 않는 경우 실제로 가져 오기를 시도 할 수 있습니다.

if python -c "import package_name" &> /dev/null; then
    echo 'all good'
else
    echo 'uh oh'
fi

2

기존 답변이 불완전하고 충분한 예가 부족하다는 것을 알았습니다. 내가 해결 한 해결책은 다음과 같습니다.

# an example checking if the pandas package is installed
if python -c 'import pkgutil; exit(not pkgutil.find_loader("pandas"))'; then
    echo 'pandas found'
else
    echo 'pandas not found'
fi

이 예제의 Github 요점은 여기에서 찾을 수 있습니다 : https://gist.github.com/shaypal5/d505af9953cd86f59c750fa600ee4ba6



1
bash 코드는 비슷하지만 Python 코드는 다르므로 상당히 다릅니다. 내 답변을 추가하기 전에 기존 답변을 모두 읽었으며 링크 된 답변이 효과가 없었습니다. 따라서 여기에 답변을 추가하는 것이 적절하고 가치가 있음을 알았습니다. :)
ShayPal5

1

스크립트에서 이와 같은 것을 사용할 수도 있습니다.

python -c "import sys, pkgutil; sys.exit(0 if pkgutil.find_loader('$Package') else 1)"

패키지가 설치되지 않았을 때 얻을 수있는 것.

Package=psutil
python3 -c "import sys, pkgutil; sys.exit(0 if pkgutil.find_loader('$Package') else 1)"
echo $?
1

패키지가 설치 될 때 얻을 수있는 것.

Package=requests
python3 -c "import sys, pkgutil; sys.exit(0 if pkgutil.find_loader('$Package') else 1)"
echo $?
0

python2 및 python3에서 작동하고 종료 코드를 기반으로 설치합니다.


0

스크립트에서 사용하기 위해 약간 더 엄격한 Anthon의 답변을 사용했습니다.

pip3 list |
    grep -v "^Package *Version$" | grep -v "^-*$" |
    cut -d ' ' -f 1 |
    grep -xF "$package_name"

처음 두 grep은 pip3의 출력에서 ​​헤더 행을 제거하기위한 것입니다.

그런 다음 컷은 패키지 이름 만 선택합니다 (버전 번호는 버림).

그런 다음 최종 grep은 관련을 정확하게 검색 할 수 있습니다 $package_name

패키지가 발견되면 패키지 이름이 표시되고 종료 코드 0으로 리턴됩니다. 패키지 이름을 표시하지 않으려면 다음 명령을 사용하여 명령을 종료하십시오. >/dev/null



0

pip3으로 테스트 :

$> pip3 show MODULENAME

모듈이 설치된 경우 종료 코드 ($?)는 "0"이고 그렇지 않으면 "1"입니다.

Grepping에는 "false positives"문제가 있습니다.

pip list | grep NAME

이름에 "NAME"이 포함 된 모든 모듈에서 일치합니다 (예 : "some_other_NAME").

동안

pip3 show MODULENAME

완전한 경기에서만 일치합니다.

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