web-dev-qa-db-ja.com

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

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

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

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

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

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

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

Alternatelyまた、Zack Titanが comment below で提案したpython-pipを使用してpythonモジュールをインストールすることもできます。numpyをインストールするにはつかいます

pip install numpy

警告:公式のUbuntuリポジトリのみを使用してpythonモジュールをインストールし、superuserpipとしてrootメソッドを使用しないことを強くお勧めしますまたはSudoを使用します)。場合によっては、システムpythonが壊れてシステムが使用できなくなることがあります。

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

71
souravc

問題のモジュールを不必要にインポートしたくない場合(tryステートメントで発生します)、sys.modulesを使用して、インストールされているモジュールをテストできますand以前にインポートされました。

pythonシェルの問題:

>>> import sys

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

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

このテストでTrueを与える前にインポートされたモジュールのみが、他のすべてのモジュール(インストールされている場合でも)がFalse.になることに注意してください。

pythonコンソールのtryおよびimportステートメントの別の代替手段は、組み込みのhelp()関数を呼び出すことです。これは、インストールされていないモジュールのドキュメントを提供しません。

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

インストールされているモジュールの非常に長いヘルプドキュメントの出力は、 Q

不足しているモジュールをインストールするには、ルートアクセスが必要であり、Python依存度の高いシステムの混乱を防ぐため、buntuパッケージ管理を使用することをお勧めします(Python pip方法ではありません) 。問題のモジュールの場合、これは例えばされる:

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

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

21
Takkat

別の方法は 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
17
cuonglm

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>
11
OozeMeister

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

$ 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
10
Avinash Raj

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

-mオプションを(ab)使用できます。 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が意図したものではありません。しかし、クイックテストが必要な場合は、最小限の入力が必要な方法です:-)

6
Martin Tournoij

Pythonで例を作成しました。

import pip
import sys
from bigml.api import BigML


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

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

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

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パッケージを管理するためのプラグインがありますが、古いバージョンを使用していて、廃止されたプラグインを使用したくないという私のような状況にいる自分自身。

3
Bruno Bronosky

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

1

これを書いている時点では、pip show ...が最も簡単な方法のようです: https://pip.pypa.io/en/stable/reference/pip_show/

ただし、パッケージがインストールされていない場合はサイレント(つまり、何も返さない)です。

0
GuSuku

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
0
xCovelus