回答:
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が壊れてシステムが使用できなくなることがあります。
vpython
次のようにインストールする必要がありますsudo apt-get install python-visual libgtkglextmm-x11-1.2-dev
sudo pip
。システムpythonが破損する可能性があります。apt-getを使用して、システムpython用のパッケージをインストールします。pip --user
オプションまたはvirtualenvを使用して、Pythonパッケージを自分でインストールできます。
問題のモジュールを不必要にインポートしたくない場合(try
ステートメントで発生しsys.modules
ます)、インストール済みでインポート済みのモジュールをテストするために利用できます。
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に依存するシステムが台無しになるのを防ぐため、Ubuntuパッケージ管理(Python pip方式ではなく)を使用することをお勧めします。問題のモジュールの場合、これは次のようになります。
sudo apt-get install python-scipy ## for Python2
sudo apt-get install python3-scipy ## for Python3
インストール後、sys.modules
それらを一度インポートすることで辞書に追加できます。
sys.modules
ています。すでにインポートされたモジュールのみが含まれているため、モジュールがインストールされているかどうかをテストする信頼できる方法ではありません。最も信頼性の高いテストは、他のいくつかが既に示唆しているように、を使用してtry/except
をトラップするImportError
ことです。
sys.modules
あることを考えると、まったく無関係であり、それについての言及は誤解を招くと思います。しかし、それは私だけかもしれません。
sys.modules
ここでは何の助けにもなりません。
別の方法は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
print()
Python 2でも正常に動作します。これは、グループ付き構文として扱われ、副作用はありません。複数の項目を追加する場合にのみ(のようにprint('a', 'b')
扱われtuple
ますがfrom __future__ import print_function
、この場合は適用されませんが、この場合は適用できません)、かっこを追加することで前方互換性のあるコードを書くことができます(変更をテストしましたPython 2および3で)
私は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>
pip show <module-name>
パッケージがインストールされているかどうかも表示されpip show numpy
ます。
コードをブロック内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
別の答えを提供するには、完了のために:
-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
であり、意図したものではありません。しかし、簡単なテストが必要な場合は、最小限の入力が必要な方法です:-)
grep -q
nullへのリダイレクトが不要になります。
/dev/null
年間で: - /
インフラストラクチャプロビジョニング**をべき等にするために、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)"
** chef、puppet、およびansibleにはすべてpythonパッケージを管理するためのプラグインがありますが、古いバージョンを使用しており、非推奨のプラグインを使用したくないという状況に陥ることがあります。
を使用して、特定のモジュールを見つけるためにpydoc modules
フィルタリングすることもできgrep
ます。出力は列形式で表示されます。このアプローチの唯一の欠点は、現在の作業ディレクトリにpythonファイルも含まれることです。それにもかかわらず、私はほとんどの時間それを自分で使用し、この関連する質問で高く引用されているアプローチの1つです:https : //stackoverflow.com/q/739993/3701431
これを書いている時点でpip show ...
、最も簡単な方法のようです:https :
//pip.pypa.io/en/stable/reference/pip_show/
ただし、パッケージがインストールされていない場合はサイレント(つまり、何も返さない)です。