プログラムを実行する前に、プログラムがインストールされていることを確認する必要があります。
答え1
pip
インストールされているパッケージのみをリストするgrepと一緒にコマンドを使用する必要がありますlist
(すべてのモジュールと隣接パッケージではありません)。
pip list | grep -F package_name
package_nameがインストールされている複数のパッケージと一致する場合(たとえば、「インストール時にboto
」検索)、@TaraPrasadGurungが提案したように代わりに使用すると便利です。パッケージ名に共通に使用される文字は単語の境界として扱われるため、正確なパッケージはリストされません。したがって、ruamel.yaml.cmd`をインストールし、必要に応じてbotocore
-w
-F
-w
requests
requests-cache
ruamel.yaml
正確に1行の出力次の作業を行う必要があります。
pip list --disable-pip-version-check | grep -E "^ruamel\.yaml "
.
使用時にすべての文字と一致するため、-E
エスケープする必要があります。
はい、パッケージがあるので必要です。ruamel_yaml
pip
。名前空間パッケージを処理するときにすべてのパッケージマネージャが互換性があるわけではありません。
答え2
パッケージのインポート時に奇妙な作業や時間のかかる作業を行わない場合は、実際にインポートを試してみてください。
if python -c "import package_name" &> /dev/null; then
echo 'all good'
else
echo 'uh oh'
fi
答え3
pip3を使ったテスト:
$> pip3 show MODULENAME
モジュールがインストールされている場合、終了コード($?)は「0」、そうでない場合は「1」です。
Greppingには「偽陽性」の問題があります。
pip list | grep NAME
名前に「NAME」を含むすべてのモジュールと一致します(例:「some_other_NAME」)。
しかし、
pip3 show MODULENAME
完全な一致のみ一致させます。
答え4
既存の回答が不完全で十分な例がないことがわかりました。私が決めた解決策は次のとおりです。
# 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