web-dev-qa-db-ja.com

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

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

10
hubatrix

シェルに入力:pydoc modules
これによりモジュールが一覧表示され、必要なモジュールをgrepできます。
stackoverflowで見つかりました here

3
mazs

piplistコマンドを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互換であるとは限りません。

11
Anthon

パッケージがインポートで奇妙なことや時間がかかることを行わない場合は、実際にインポートしてみることができます。

if python -c "import package_name" &> /dev/null; then
    echo 'all good'
else
    echo 'uh oh'
fi
4
Dmiters

既存の回答が不完全であり、十分な例がないことがわかりました。ここに私が解決した解決策があります:

# 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

2
ShayPal5

スクリプトでこのようなものを使用することもできます。

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で動作し、終了コードに基づいてインストールします。

1
R J

Pip3でテスト:

$> pip3 show MODULENAME

モジュールがインストールされている場合、終了コード($?)は「0」、それ以外の場合は「1」になります。

Greppingには「誤検知」の問題があります。

pip list | grep NAME

名前が「NAME」を含むすべてのモジュールに一致します。 「some_other_NAME」にも一致します。

ながら

pip3 show MODULENAME

完全一致でのみ一致します。

0
Thomas Hofmann

私は、スクリプトで使用するために、少し厳密なバージョンの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でコマンドを終了します。

0
joeytwiddle

Python Shell/Prompt。:

>>> help('modules')