답변:
설치된 패키지 만 나열하는 grep과 함께 pip
의 list
명령을 사용해야 합니다 (모든 모듈 및 인접 패키지도 포함되지 않음).
pip list | grep -F package_name
package_name이 설치된 여러 패키지와 일치하는 경우 (예 : boto
언제 설치되어 있는지 검색하는 경우 botocore
) @TaraPrasadGurung이 제안한대로 -w
대신 대신 -F
사용할 수 있습니다. -w
패키지 이름에 공통적 인 문자가 단어 경계로 표시되므로 정확한 패키지가 표시되지 않습니다 . 그래서 당신은 당신이있는 경우 requests
와 requests-cache
설치하거나 ruamel.yaml
및 ruamel.yaml.cmd`와 필요가 정확하게 출력의 한 줄은 당신이 좋아하는 일을 할 필요가 :
pip list --disable-pip-version-check | grep -E "^ruamel\.yaml "
를 .
사용할 때 모든 문자와 일치하므로 -E
이스케이프해야합니다 .¹
¹ 그리고 패키지가 있으므로 필요합니다 ruamel_yaml
. pip
네임 스페이스 패키지를 다룰 때 모든 패키지 관리자가 호환되는 것은 아닙니다 .
-w
단어 경계로 사용되며 패키지 이름에서 일반적입니다. 나는 당신의 제안하여 사용할 때 여러 개의 일치를 얻을 grep -w ruamel.yaml
또는grep -w request
pip list | grep -F mxnet-cu101
mxnet-cu101 1.5.0
정확하게 설치되는 위치는 아니지만 인쇄합니다 . 설치된 경로를 얻는 방법을 알고 있습니까? `
기존 답변이 불완전하고 충분한 예가 부족하다는 것을 알았습니다. 내가 해결 한 해결책은 다음과 같습니다.
# 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
스크립트에서 이와 같은 것을 사용할 수도 있습니다.
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에서 작동하고 종료 코드를 기반으로 설치합니다.
스크립트에서 사용하기 위해 약간 더 엄격한 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
pip install
. 이미 설치되어 있으면 다시 설치되지 않습니다.