モジュールがPythonにインストールされているかどうかを確認し、必要に応じてインストールする方法を教えてください。


89

ターミナルで、Pythonを起動した後、pythonに存在するモジュールをどのように知ることができますか?モジュールNumPyとSciPyを学ぶ必要があるとします。

  • インストールされていない場合、どのようにインストールしますか?
  • 既にインストールされているかどうかを知るにはどうすればよいですか?

回答:


73

pythonモジュールがシステムにインストールされているかどうかを確認する方法:ターミナルで非常に簡単なテストを行うことができます。

$ python -c "import math"
$ echo $?
0                                # math module exists in system

$ python -c "import numpy"
Traceback (most recent call last):
  File "<string>", line 1, in <module>
ImportError: No module named numpy
$ echo $?
1                                # numpy module does not exist in system

インストールされていない場合、どのようにインストールしますか

リポジトリからそれぞれのパッケージをダウンロードすることにより、特定のモジュールをインストールできます。たとえば、次のようにインストールscipyできます。

sudo apt-get install python-scipy ## for Python2
sudo apt-get install python3-scipy ## for Python3

代わりpython-pipに、以下コメントで Zack Titanが提案したようにを使用してpythonモジュールをインストールするnumpyこともできます。

pip install numpy

警告:非常にすぎず、使用することを公式Ubuntuのリポジトリを使用してのpython-モジュールをインストールすることを推奨しpipたような方法をスーパーユーザ(すなわち、などrootまたは使用sudo)。場合によっては、システムpythonが壊れてシステムが使用できなくなることがあります。

pipローカル仮想環境に使用してパッケージをインストールする方法。


あなたの答えのように数学モジュールが存在し、numbyの場合はトレースバックが表示されず、echo $の場合は?出力は0でしたが、numpyもシステムに存在することを意味しますか?
TechJhola

1
はい、システムにあります。
souravc

モジュールnumpyがない場合、どのようにインポートしますか?コーディングを行うとき、numpy import *からimportステートメントを呼び出し、モジュールをインストールしますか?そうでない場合、新しいモジュールをどのようにインストールしますか?
TechJhola

1
モジュールのインストール方法は別の質問になります。モジュールごとに異なるパッケージが必要です。たとえば、インストールするには、vpython次のようにインストールする必要がありますsudo apt-get install python-visual libgtkglextmm-x11-1.2-dev
souravc

1
使用しないでくださいsudo pip。システムpythonが破損する可能性があります。apt-getを使用して、システムpython用のパッケージをインストールします。pip --userオプションまたはvirtualenvを使用して、Pythonパッケージを自分でインストールできます。
jfs

21

問題のモジュールを不必要にインポートしたくない場合(tryステートメントで発生しsys.modulesます)、インストール済みインポート済みのモジュールをテストするために利用できます。

Pythonシェルの問題:

>>> import sys

次に、インストールされているモジュールをテストします。

>>> 'numpy' in sys.modules
True
>>> 'scipy' in sys.modules
False

Trueこのテストを行う前にインポートされたモジュールのみが、他のすべてのモジュール(インストールされている場合でも)になります。False.

別の代替のpythonコンソールの文は作り付け呼び出している関数。これは、インストールされていないモジュールのドキュメントを提供しません。例えばtryimporthelp()

>>> help('scipy')
no Python documentation found for 'scipy'

インストールされたモジュールの非常に長いヘルプドキュメントの出力は、で中断できますQ

不足しているモジュールをインストールするには、ルートアクセスが必要であり、Pythonに依存するシステムが台無しになるのを防ぐため、Ubuntuパッケージ管理(Python pip方式ではなく)を使用することをお勧めします。問題のモジュールの場合、これは次のようになります。

sudo apt-get install python-scipy ## for Python2
sudo apt-get install python3-scipy ## for Python3

インストール後、sys.modulesそれらを一度インポートすることで辞書に追加できます。


1
私は....これが最もPython的な答えだと思う
Grijesh Chauhan

3
この最初の部分は間違っsys.modulesいます。すでにインポートされたモジュールのみが含まれているため、モジュールがインストールされているかどうかをテストする信頼できる方法ではありません。最も信頼性の高いテストは、他のいくつかが既に示唆しているように、を使用してtry/exceptをトラップするImportErrorことです。
エクモロ

@ekhumoro-ありがとう、答えを編集してわかりやすくします。
タックカット

4
まだ十分に明らかではないようです。モジュールがインストールされているインポートされていない)かどうかを確認する方法を尋ねる質問でsys.modulesあることを考えると、まったく無関係であり、それについての言及は誤解を招くと思います。しかし、それは私だけかもしれません。
デビッドZ

1
sys.modulesここでは何の助けにもなりません。

19

別の方法はpkgutilモジュールです。Python 2と3の両方で動作します:

python -c 'import pkgutil; print(1 if pkgutil.find_loader("module") else 0)'

moduleモジュールの名前に置き換える必要があります。例:

$ python -c 'import pkgutil; print(1 if pkgutil.find_loader("math") else 0)'
1

2
私の変更のいくつかを元に戻すのを見ました。print()Python 2でも正常に動作します。これは、グループ付き構文として扱われ、副作用はありません。複数の項目を追加する場合にのみ(のようにprint('a', 'b')扱われtupleますがfrom __future__ import print_function、この場合は適用されませんが、この場合は適用できません)、かっこを追加することで前方互換性のあるコードを書くことができます(変更をテストしましたPython 2および3で)
マーティントゥルノイ

@Carpetsmoker:指摘してくれてありがとう。古いバージョンにロールバックします。
cuonglm

これは素晴らしい答えです。終了/ステータスコード(シェルスクリプトフロー制御用)を返し、モジュール名をコマンドライン引数として受け取る派生的な回答を追加しました。askubuntu.com/a/891384/146273
ブルーノブロノスキー

うまくいきました!-ちょうどに変更するexitことがシェルのコンテキストで使用できるように:python -c 'import pkgutil; exit(0 if pkgutil.find_loader("math") else 2)'
AT

12

私はOPがPythonを起動した後に最初に解決策を要求したことを知っていますが、Python以外では私が使用しますpip。ubuntu:でsudo apt-get install python-pip、まだインストールされていない場合。

次に、使用可能なサードパーティモジュールを確認するには、次を実行します。

pip freeze

あるいは

pip list

そして、両方ともインストールされているすべてのモジュールとそのバージョンを表示します。

お探しのモジュールがインストールされていない場合、ほとんどの場合、pipで簡単にインストールできます。

pip install <module-name>

モジュールが存在するかどうか、またはそのPyPI名がわからない場合は、次を使用しますpip search

pip search <keyword>

1
また、pip show <module-name>パッケージがインストールされているかどうかも表示されpip show numpyます。
ヘルペスフリーエンジニア

10

コードをブロック内tryに配置できexceptます。

$ python3 -c "\
try:
    import cow  
    print('\nModule was installed')
except ImportError:
    print('\nThere was no such module installed')"

There was no such module installed

$ python3 -c "\
try:
    import regex
    print('\nModule was installed')
except ImportError:
    print('\nThere was no such module installed')"

Module was installed

6

別の答えを提供するには、完了のために:

-mオプションを使用(使用)できます。Pythonのマンページから:

   -m module-name
          Searches sys.path for the named module and runs the  correspond
          ing .py file as a script.

それは私たちに与えます:

$ python2 -m numpy
/sbin/python2: No module named numpy.__main__; 'numpy' is a package and cannot be directly executed

$ python2 -m math
/sbin/python2: No code object available for math

ただし、存在しないモジュールの場合、次のようになります。

$ python2 -m doesnt_exist
/sbin/python2: No module named doesnt_exist

grepこのために使用できます:

$ python2 -m doesnt_exist |& grep -q 'No module named' && echo 'Nope' || echo 'Yup'
Nope

$ python2 -m math |& grep -q 'No module named' && echo 'Nope' || echo 'Yup'
Yup

これはわずかにハック的なもの-mであり、意図したものではありません。しかし、簡単なテストが必要な場合は、最小限の入力が必要な方法です:-)


4
grep -qnullへのリダイレクトが不要になります。
ムル

3
@muru Yikes!私はに無用リダイレクトの多くを入力した/dev/null年間で: - /
マーティンTournoij

4

Pythonで例を作成しました。

import pip
import sys
from bigml.api import BigML


if not 'bigml' in sys.modules.keys():
    pip.main(['install', 'bigml'])

3

シェルワンライナーチェック(プロビジョニングに便利)

インフラストラクチャプロビジョニング**をべき等にするために、onelinerでシェルからパッケージをチェックできる必要があることがわかりました。@cuonglmの答えに基づいて作成しました。文字列を出力するのではなく、終了ステータスを生成しているため、「」を逆にする必要が1ありまし0た。

python -c "import sys, pkgutil; sys.exit(0 if pkgutil.find_loader(sys.argv[1]) else 1)" pymongo

sys.argv[1]パッケージの名前を一重引用符で囲んで置き換えることもできますが、私のプロビジョニングスクリプトでは、最後に持っておくと読みやすくなります。

python -c "import sys, pkgutil; sys.exit(0 if pkgutil.find_loader('pymongo') else 1)"

** chefpuppet、およびansibleにはすべてpythonパッケージを管理するためのプラグインがありますが、古いバージョンを使用しており、非推奨のプラグインを使用したくないという状況に陥ることがあります。


1

を使用して、特定のモジュールを見つけるためにpydoc modulesフィルタリングすることもできgrepます。出力は列形式で表示されます。このアプローチの唯一の欠点は、現在の作業ディレクトリにpythonファイルも含まれることです。それにもかかわらず、私はほとんどの時間それを自分で使用し、この関連する質問で高く引用されているアプローチの1つです:https : //stackoverflow.com/q/739993/3701431


0

Ubuntu Shellから、デフォルトではbash、

pip list | grep <package-name-Case-Matters>

pip list | grep pywinrm

pip list | grep numpy

そして、もしあなたがそのケースについて疑問があるなら(すべてのパッケージ名は常に小文字だと思うが):

pip list | grep [Nn]um[Pp]y  # it works with numpy, Numpy, numPy, and NumPy

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.