回答:
インストールされたパッケージのみを一覧表示するgrepでpip
のlist
コマンドを使用する必要があります(すべてのモジュールとそのネイバーも同様ではありません)。
pip list | grep -F package_name
package_nameが複数のインストール済みパッケージに一致する場合(たとえば、もインストールされているboto
場合の検索)は、@ TaraPrasadGurungが示唆しているように、代わりにbotocore
を使用-w
すると-F
役立ちます。-w
パッケージ名に共通の文字が単語の境界として表示されるため、これは正確なパッケージをリストしません。そのためrequests
、requests-cache
or ruamel.yaml
とruamel.yaml.cmd` をインストールしていて 、1行だけの出力が必要な場合は、次のようにする必要があります。
pip list --disable-pip-version-check | grep -E "^ruamel\.yaml "
.
を使用すると-E
、どの文字にも一致するため、エスケープする必要があることに注意してください。¹
¹ はい、パッケージがあるので必要ruamel_yaml
です。pip
名前空間パッケージを扱う場合、すべてのパッケージマネージャーが互換性があるわけではありません。
-w
単語の境界として使用され、パッケージ名では一般的です。grep -w ruamel.yaml
or を使用して提案を使用すると、複数の一致が表示されます 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"
最初の2つのgrepsは、pip3の出力からヘッダー行を取り除くことを目的としています。
次に、カットはパッケージ名のみを選択します(バージョン番号は破棄されます)。
次に、最終的なgrepは、関連するものを正確に検索できます。 $package_name
パッケージが見つかると、パッケージ名が表示され、終了コード0が返されます。パッケージ名を表示したくない場合は、コマンドを >/dev/null
pip install
ます。すでにインストールされている場合は、再度インストールされません。