ターミナルで、Pythonを起動した後、pythonに存在するモジュールをどのように知ることができますか?モジュールNumPyとSciPyを学ぶ必要があるとします。
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モジュールをインストールし、superuser(pip
としてroot
メソッドを使用しないことを強くお勧めしますまたはSudo
を使用します)。場合によっては、システムpythonが壊れてシステムが使用できなくなることがあります。
問題のモジュールを不必要にインポートしたくない場合(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
辞書に追加できます。
別の方法は 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
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>
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
オプションを(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
が意図したものではありません。しかし、クイックテストが必要な場合は、最小限の入力が必要な方法です:-)
Pythonで例を作成しました。
import pip
import sys
from bigml.api import BigML
if not 'bigml' in sys.modules.keys():
pip.main(['install', 'bigml'])
インフラストラクチャプロビジョニング**をべき等にするために、ワンライナーでシェルからパッケージをチェックできる必要があることがわかりました。 @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パッケージを管理するためのプラグインがありますが、古いバージョンを使用していて、廃止されたプラグインを使用したくないという私のような状況にいる自分自身。
特定のモジュールを見つけるためにgrep
でフィルタリングできるpydoc modules
を使用することもできます。出力は列形式で表示されます。このアプローチの唯一の欠点は、現在の作業ディレクトリにpythonファイルも含まれることです。それにもかかわらず、私はほとんどの時間それを自分で使用し、この関連する質問で非常に引用されたアプローチの1つです: https://stackoverflow.com/q/739993/3701431
これを書いている時点では、pip show ...
が最も簡単な方法のようです: https://pip.pypa.io/en/stable/reference/pip_show/
ただし、パッケージがインストールされていない場合はサイレント(つまり、何も返さない)です。
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