プログラムを実行する前に、インストールされているかどうかを確認する必要があります。
シェルに入力:pydoc modules
。
これによりモジュールが一覧表示され、必要なモジュールをgrepできます。
stackoverflowで見つかりました here
pip
のlist
コマンドをgrepで使用する必要があります。これは、インストールされたパッケージのみを一覧表示します(すべてのモジュールとそのネイバーも同様ではありません)。
_pip list | grep -F package_name
_
Package_nameが複数のインストール済みパッケージと一致する場合。 boto
もインストールされている場合にbotocore
を検索すると、@ TaraPrasadGurungが示唆しているように、_-w
_の代わりに_-F
_を使用すると役立つ場合があります。 _-w
_は、パッケージ名に共通の文字をWordの境界と見なすため、正確なパッケージはリストされません。したがって、requests
と_requests-cache
_がインストールされているか、_ruamel.yaml
_とruamel.yaml.cmd`があり、正確に1行の出力次のようなことをする必要があります:
_pip list --disable-pip-version-check | grep -E "^ruamel\.yaml "
_
_.
_を使用すると、_-E
_は任意の文字に一致するため、エスケープする必要があることに注意してください。¹
¹ そして、はい、それはパッケージがあるので必要です _ruamel_yaml
_ 。名前空間パッケージを扱う場合、すべてのパッケージマネージャーがpip
互換であるとは限りません。
パッケージがインポートで奇妙なことや時間がかかることを行わない場合は、実際にインポートしてみることができます。
if python -c "import package_name" &> /dev/null; then
echo 'all good'
else
echo 'uh oh'
fi
既存の回答が不完全であり、十分な例がないことがわかりました。ここに私が解決した解決策があります:
# 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 Gistはここにあります: 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で動作し、終了コードに基づいてインストールします。
Pip3でテスト:
$> pip3 show MODULENAME
モジュールがインストールされている場合、終了コード($?)は「0」、それ以外の場合は「1」になります。
Greppingには「誤検知」の問題があります。
pip list | grep NAME
名前が「NAME」を含むすべてのモジュールに一致します。 「some_other_NAME」にも一致します。
ながら
pip3 show MODULENAME
完全一致でのみ一致します。
私は、スクリプトで使用するために、少し厳密なバージョンの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
でコマンドを終了します。
Python Shell/Prompt。:
>>> help('modules')