Python3にモジュールまたはパッケージがすでにインストールされているかどうかを確認する方法は?

Python3にモジュールまたはパッケージがすでにインストールされているかどうかを確認する方法は?

プログラムを実行する前に、プログラムがインストールされていることを確認する必要があります。

答え1

pipインストールされているパッケージのみをリストするgrepと一緒にコマンドを使用する必要がありますlist(すべてのモジュールと隣接パッケージではありません)。

pip list | grep -F package_name

package_nameがインストールされている複数のパッケージと一致する場合(たとえば、「インストール時にboto」検索)、@TaraPrasadGurungが提案したように代わりに使用すると便利です。パッケージ名に共通に使用される文字は単語の境界として扱われるため、正確なパッケージはリストされません。したがって、ruamel.yaml.cmd`をインストールし、必要に応じてbotocore-w-F-wrequestsrequests-cacheruamel.yaml正確に1行の出力次の作業を行う必要があります。

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

.使用時にすべての文字と一致するため、-Eエスケープする必要があります。


はい、パッケージがあるので必要です。ruamel_yamlpip。名前空間パッケージを処理するときにすべてのパッケージマネージャが互換性があるわけではありません。

答え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

関連情報