ローカルにインストールされている Python モジュールのリストを取得するにはどうすればよいですか?
質問
Python インストール (UNIX サーバー) にある Python モジュールのリストを取得したいと考えています。
コンピューターにインストールされている Python モジュールのリストを取得するにはどうすればよいでしょうか?
解決
解決
pip > 10.0 では使用しないでください。
を手に入れるために私の50セント pip freeze
Python スクリプトのようなリスト:
import pip
installed_packages = pip.get_installed_distributions()
installed_packages_list = sorted(["%s==%s" % (i.key, i.version)
for i in installed_packages])
print(installed_packages_list)
(長すぎる) ワンライナーとして:
sorted(["%s==%s" % (i.key, i.version) for i in pip.get_installed_distributions()])
寄付:
['behave==1.2.4', 'enum34==1.0', 'flask==0.10.1', 'itsdangerous==0.24',
'jinja2==2.7.2', 'jsonschema==2.3.0', 'markupsafe==0.23', 'nose==1.3.3',
'parse-type==0.3.4', 'parse==1.6.4', 'prettytable==0.7.2', 'requests==2.3.0',
'six==1.6.1', 'vioozer-metadata==0.1', 'vioozer-users-server==0.1',
'werkzeug==0.9.4']
範囲
このソリューションはシステム スコープまたは仮想環境スコープに適用され、によってインストールされるパッケージをカバーします。 setuptools
, pip
そして (神は禁じます) easy_install
.
私の使用例
この呼び出しの結果をフラスコサーバーに追加したので、次のように呼び出したとき http://example.com/exampleServer/environment
サーバーの virtualenv にインストールされているパッケージのリストを取得します。これにより、デバッグが非常に簡単になります。
注意事項
私は、Python インタプリタが同じディレクトリで呼び出されたとき、このテクニックの奇妙な動作に気づきました。 setup.py
ファイルには、によってインストールされたパッケージはリストされません。 setup.py
.
再現する手順:
仮想環境を作成する$ cd /tmp
$ virtualenv test_env
New python executable in test_env/bin/python
Installing setuptools, pip...done.
$ source test_env/bin/activate
(test_env) $
git リポジトリのクローンを作成する setup.py
(test_env) $ git clone https://github.com/behave/behave.git
Cloning into 'behave'...
remote: Reusing existing pack: 4350, done.
remote: Total 4350 (delta 0), reused 0 (delta 0)
Receiving objects: 100% (4350/4350), 1.85 MiB | 418.00 KiB/s, done.
Resolving deltas: 100% (2388/2388), done.
Checking connectivity... done.
私たちは行儀を持っています setup.py
で /tmp/behave
:
(test_env) $ ls /tmp/behave/setup.py
/tmp/behave/setup.py
git リポジトリから Python パッケージをインストールします(test_env) $ cd /tmp/behave && pip install .
running install
...
Installed /private/tmp/test_env/lib/python2.7/site-packages/enum34-1.0-py2.7.egg
Finished processing dependencies for behave==1.2.5a1
前述のソリューションを実行すると、 /tmp
>>> import pip
>>> sorted(["%s==%s" % (i.key, i.version) for i in pip.get_installed_distributions()])
['behave==1.2.5a1', 'enum34==1.0', 'parse-type==0.3.4', 'parse==1.6.4', 'six==1.6.1']
>>> import os
>>> os.getcwd()
'/private/tmp'
前述のソリューションを実行すると、 /tmp/behave
>>> import pip
>>> sorted(["%s==%s" % (i.key, i.version) for i in pip.get_installed_distributions()])
['enum34==1.0', 'parse-type==0.3.4', 'parse==1.6.4', 'six==1.6.1']
>>> import os
>>> os.getcwd()
'/private/tmp/behave'
behave==1.2.5a1
作業ディレクトリには次のものが含まれているため、2 番目の例にはありません。 behave
さんの setup.py
ファイル。
ドキュメントにはこの問題に関する言及が見つかりませんでした。おそらくバグを公開するつもりです。
他のヒント
help('modules')
Pythonシェル/プロンプトインチ
さて、これらの方法では、私は自分自身を試してみました、そして私が宣伝されたまさにました:。すべてのモジュール
ああ、本当にあなたはあなたのpythonインストールと得るものを知って、STDLIBについてあまり気にしません。
は本当に、私は私がインストールををものにしたいです。
実際には、驚くべきことに、働いていた何だけで大丈夫だっます:
pip freeze
戻った。
Fabric==0.9.3
apache-libcloud==0.4.0
bzr==2.3b4
distribute==0.6.14
docutils==0.7
greenlet==0.3.1
ipython==0.10.1
iterpipes==0.4
libxml2-python==2.6.21
いない名「凍結」はPythonのパッケージの下にはとても奇妙ですが、私は言う、「驚くほど」パッケージツールをインストールするので、私は、このツールは、理にかなっていることを仰天だということを、一つはこの機能を見つけることを期待する正確な場所です。 0.8.2、Pythonの2.7ピップ。
で
ipython
「」と入力できますimport
タブ".標準の Python インタープリタでは、「」と入力できます。
help('modules')
".コマンドラインでは、次のように使用できます。
pydoc
modules
.スクリプト内で次のように呼び出します。
pkgutil.iter_modules()
.
PIPのバージョン1.3以来、あなたはへのアクセスを持っています
pip list
どの「ピップフリーズ」のための糖衣構文であると思われます。それは彼らのバージョン番号と一緒に、インストールまたはvirtualenvのに特定のモジュールのすべてが一覧表示されます。残念ながら、それはすべてのモジュールの現在のバージョン番号が表示されません。また、あなたのお皿を洗ったり、靴を輝かん。
私は現在、使用されるモジュールを参照するためにこれを使用します:
import sys as s
s.modules.keys()
あなたのpythonで実行されているすべてのモジュールが表示されます。
すべての組み込みモジュールの場合は、使用します:
s.modules
すべてのモジュールとインポートオブジェクトを格納している辞書はどれます。
通常のシェルでは、単に
を使用pydoc modules
ピップ10のとおり、受け入れ答えは機能しなくなります。開発チームはget_installed_distributions
ルーチンへのアクセスを削除しています。同じことを行うためsetuptools
で代替機能があります。ここピップ10で動作する代替バージョンがあります:
import pkg_resources
installed_packages = pkg_resources.working_set
installed_packages_list = sorted(["%s==%s" % (i.key, i.version)
for i in installed_packages])
print(installed_packages_list)
それがすぎたり、ピップの以前のバージョンでは動作しませんでしょう場合は私に知らせてくださいます。
私たちはPythonシェルにインストールされているパッケージの一覧を表示する必要がある場合は、次のように、我々はhelp
コマンドを使用することができます。
>>help('modules package')
私は普通の(バージョン付き)パッケージの一覧を取得するにはpip list
を使用します。
このはもちろん、あまりにも仮想環境で動作します。唯一の仮想環境(ないグローバルパッケージ)に設置されているものを示すために、pip list --local
を使用します。
は、ここでいくつかの良い例で、すべての利用可能なpip list
オプションを示すのドキュメントですます。
非常にシンプルな検索
from pkgutil import iter_modules
a=iter_modules()
while True:
try: x=a.next()
except: break
if 'searchstr' in x[1]: print x[1]
私は(両方の助けとpydocを使用)。
これは、インストール済みのモジュールを一覧表示するにはX11を必要とOS X上のカスタムインストールのpython 2.7に走りました私は、HTTPサーバ、すなわちとしてpydocを走ったX11をインストールせずに、すべてのモジュールを一覧表示することができるようにするには:ます。
pydoc -p 12345
そして、それはすべてのモジュールを参照してくださいhttp://localhost:12345/
するサファリを指示することが可能です。
Windows上で、CMDでこれを入力します。
c:\python\libs>python -m pip freeze
別にpip freeze
を使用してから私は自分の仮想環境で卵黄にインストールされています。
- 利用可能なすべてのモジュールを取得するには、実行します
sys.modules
- すべてを手に入れるために インストールされています モジュール (読み取り:によってインストールされました
pip
)、あなたは見ることができますpip.get_installed_distributions()
2 番目の目的のコード例は次のとおりです。
import pip
for package in pip.get_installed_distributions():
name = package.project_name # SQLAlchemy, Django, Flask-OAuthlib
key = package.key # sqlalchemy, django, flask-oauthlib
module_name = package._get_metadata("top_level.txt") # sqlalchemy, django, flask_oauthlib
location = package.location # virtualenv lib directory etc.
version = package.version # version number
このソリューションは主にモジュールに基づいています importlib
そして pkgutil
CPython 3.4 および CPython 3.5 で動作しますが、CPython 2 はサポートされていません。
説明
sys.builtin_module_names
- すべての組み込みモジュールに名前を付けます(私の答えを見てください) ここ)pkgutil.iter_modules()
- 利用可能なすべてのモジュールに関する情報を返します。importlib.util.find_spec()
- モジュールのインポートに関する情報が存在する場合は返します。BuiltinImporter
- 組み込みモジュールのインポーター (ドキュメント)SourceFileLoader
- 標準 Python モジュールのインポーター (デフォルトでは拡張子 *.py が付いています) (ドキュメント)ExtensionFileLoader
- モジュールのインポーター 共有ライブラリ (C または C++ で書かれています)
完全なコード
import sys
import os
import shutil
import pkgutil
import importlib
import collections
if sys.version_info.major == 2:
raise NotImplementedError('CPython 2 is not supported yet')
def main():
# name this file (module)
this_module_name = os.path.basename(__file__).rsplit('.')[0]
# dict for loaders with their modules
loaders = collections.OrderedDict()
# names`s of build-in modules
for module_name in sys.builtin_module_names:
# find an information about a module by name
module = importlib.util.find_spec(module_name)
# add a key about a loader in the dict, if not exists yet
if module.loader not in loaders:
loaders[module.loader] = []
# add a name and a location about imported module in the dict
loaders[module.loader].append((module.name, module.origin))
# all available non-build-in modules
for module_name in pkgutil.iter_modules():
# ignore this module
if this_module_name == module_name[1]:
continue
# find an information about a module by name
module = importlib.util.find_spec(module_name[1])
# add a key about a loader in the dict, if not exists yet
loader = type(module.loader)
if loader not in loaders:
loaders[loader] = []
# add a name and a location about imported module in the dict
loaders[loader].append((module.name, module.origin))
# pretty print
line = '-' * shutil.get_terminal_size().columns
for loader, modules in loaders.items():
print('{0}\n{1}: {2}\n{0}'.format(line, len(modules), loader))
for module in modules:
print('{0:30} | {1}'.format(module[0], module[1]))
if __name__ == '__main__':
main()
使用法
CPython3.5の場合(短縮版)
$ python3.5 python_modules_info.py
------------------------------------------------------------------------------------------------------------------------------------------------------------------------
30: <class '_frozen_importlib.BuiltinImporter'>
------------------------------------------------------------------------------------------------------------------------------------------------------------------------
_ast | built-in
_codecs | built-in
_collections | built-in
_functools | built-in
_imp | None
_io | built-in
_locale | built-in
_operator | built-in
_signal | built-in
_sre | built-in
_stat | built-in
_string | built-in
_symtable | built-in
_thread | built-in
(****************************truncated*******************************)
------------------------------------------------------------------------------------------------------------------------------------------------------------------------
227: <class '_frozen_importlib_external.SourceFileLoader'>
------------------------------------------------------------------------------------------------------------------------------------------------------------------------
__future__ | /usr/local/lib/python3.5/__future__.py
_bootlocale | /usr/local/lib/python3.5/_bootlocale.py
_collections_abc | /usr/local/lib/python3.5/_collections_abc.py
_compat_pickle | /usr/local/lib/python3.5/_compat_pickle.py
_compression | /usr/local/lib/python3.5/_compression.py
_dummy_thread | /usr/local/lib/python3.5/_dummy_thread.py
_markupbase | /usr/local/lib/python3.5/_markupbase.py
_osx_support | /usr/local/lib/python3.5/_osx_support.py
_pydecimal | /usr/local/lib/python3.5/_pydecimal.py
_pyio | /usr/local/lib/python3.5/_pyio.py
_sitebuiltins | /usr/local/lib/python3.5/_sitebuiltins.py
(****************************truncated*******************************)
------------------------------------------------------------------------------------------------------------------------------------------------------------------------
64: <class '_frozen_importlib_external.ExtensionFileLoader'>
------------------------------------------------------------------------------------------------------------------------------------------------------------------------
_bisect | /usr/local/lib/python3.5/lib-dynload/_bisect.cpython-35m-x86_64-linux-gnu.so
_bz2 | /usr/local/lib/python3.5/lib-dynload/_bz2.cpython-35m-x86_64-linux-gnu.so
_codecs_cn | /usr/local/lib/python3.5/lib-dynload/_codecs_cn.cpython-35m-x86_64-linux-gnu.so
_codecs_hk | /usr/local/lib/python3.5/lib-dynload/_codecs_hk.cpython-35m-x86_64-linux-gnu.so
_codecs_iso2022 | /usr/local/lib/python3.5/lib-dynload/_codecs_iso2022.cpython-35m-x86_64-linux-gnu.so
(****************************truncated*******************************)
CPython3.4の場合(短縮版)
$ python3.4 python_modules_info.py
------------------------------------------------------------------------------------------------------------------------------------------------------------------------
54: <class '_frozen_importlib.BuiltinImporter'>
------------------------------------------------------------------------------------------------------------------------------------------------------------------------
_ast | built-in
_bisect | built-in
_codecs | built-in
_collections | built-in
_datetime | built-in
_elementtree | built-in
_functools | built-in
_heapq | built-in
_imp | None
_io | built-in
_locale | built-in
_md5 | built-in
_operator | built-in
_pickle | built-in
_posixsubprocess | built-in
_random | built-in
(****************************truncated*******************************)
------------------------------------------------------------------------------------------------------------------------------------------------------------------------
246: <class '_frozen_importlib.SourceFileLoader'>
------------------------------------------------------------------------------------------------------------------------------------------------------------------------
__future__ | /usr/lib/python3.4/__future__.py
_bootlocale | /usr/lib/python3.4/_bootlocale.py
_collections_abc | /usr/lib/python3.4/_collections_abc.py
_compat_pickle | /usr/lib/python3.4/_compat_pickle.py
_dummy_thread | /usr/lib/python3.4/_dummy_thread.py
_markupbase | /usr/lib/python3.4/_markupbase.py
_osx_support | /usr/lib/python3.4/_osx_support.py
_pyio | /usr/lib/python3.4/_pyio.py
(****************************truncated*******************************)
------------------------------------------------------------------------------------------------------------------------------------------------------------------------
44: <class '_frozen_importlib.ExtensionFileLoader'>
------------------------------------------------------------------------------------------------------------------------------------------------------------------------
_bz2 | /usr/lib/python3.4/lib-dynload/_bz2.cpython-34m-x86_64-linux-gnu.so
_codecs_cn | /usr/lib/python3.4/lib-dynload/_codecs_cn.cpython-34m-x86_64-linux-gnu.so
_codecs_hk | /usr/lib/python3.4/lib-dynload/_codecs_hk.cpython-34m-x86_64-linux-gnu.so
_codecs_iso2022 | /usr/lib/python3.4/lib-dynload/_codecs_iso2022.cpython-34m-x86_64-linux-gnu.so
_codecs_jp | /usr/lib/python3.4/lib-dynload/_codecs_jp.cpython-34m-x86_64-linux-gnu.so
_codecs_kr | /usr/lib/python3.4/lib-dynload/_codecs_kr.cpython-34m-x86_64-linux-gnu.so
_codecs_tw | /usr/lib/python3.4/lib-dynload/_codecs_tw.cpython-34m-x86_64-linux-gnu.so
_crypt | /usr/lib/python3.4/lib-dynload/_crypt.cpython-34m-x86_64-linux-gnu.so
(****************************truncated*******************************)
ピップフリーズ パッケージの検索はすべて行いますが、次のコマンドを記述するだけで、Python パッケージが存在するすべてのパスを一覧表示できます。
>>> import site; site.getsitepackages()
['/usr/local/lib/python2.7/dist-packages', '/usr/lib/python2.7/dist-packages']
アイデアはたくさんありますが、最初はこの 2 つを考えています。
ピップ
短所:常にインストールされているわけではありません
ヘルプ('モジュール')
短所:コンソールへの出力。壊れたモジュール (ubuntu を参照) ではセグメンテーション違反が発生する可能性があります
基本ライブラリを使用し、古い Python 2.x と互換性のある簡単なアプローチが必要です
そして私には光が見えます: リストモジュール.py
2.5 のドキュメント ソース ディレクトリには、Python インストールで使用可能なすべてのモジュールをリストする小さなスクリプトが隠されています。
長所:
のみを使用します インプ、システム、OS、再、時間
Python 1.5.2 以降で実行するように設計されています
ソース コードは非常にコンパクトなので、バグのあるモジュールの例外リストを渡すなど、簡単にいじることができます (モジュールをインポートしようとしないでください)。
猫の皮を剥ぐ方法はたくさんあります。
最も簡単な方法は、
pydoc
次のようにシェルから直接関数を実行します。
pydoc modules
ただし、詳細については、と呼ばれるツールを使用してください ピップデート インストール日もわかります。
pip install pip-date
これらを試してみてください
pip list
または
pip freeze
AWS Lambda でデフォルトで利用可能なパッケージの特定のバージョンを見つける必要がありました。このページのアイデアをマッシュアップして作成しました。後世のためにそれを共有します。
import pkgutil
__version__ = '0.1.1'
def get_ver(name):
try:
return str(__import__(name).__version__)
except:
return None
def lambda_handler(event, context):
return {
'statusCode': 200,
'body': [{
'path': m.module_finder.path,
'name': m.name,
'version': get_ver(m.name),
} for m in list(pkgutil.iter_modules())
#if m.module_finder.path == "/var/runtime" # Uncomment this if you only care about a certain path
],
}
私が発見したのは、提供されている boto3 ライブラリがかなり古く、コードが失敗したのは私のせいではないということでした。boto3 と botocore をプロジェクトに追加する必要があるだけでした。しかし、これがなかったら、自分のコードが悪いのではないかと頭をぶつけていたことでしょう。
{
"statusCode": 200,
"body": [
{
"path": "/var/task",
"name": "lambda_function",
"version": "0.1.1"
},
{
"path": "/var/runtime",
"name": "bootstrap",
"version": null
},
{
"path": "/var/runtime",
"name": "boto3",
"version": "1.9.42"
},
{
"path": "/var/runtime",
"name": "botocore",
"version": "1.12.42"
},
{
"path": "/var/runtime",
"name": "dateutil",
"version": "2.7.5"
},
{
"path": "/var/runtime",
"name": "docutils",
"version": "0.14"
},
{
"path": "/var/runtime",
"name": "jmespath",
"version": "0.9.3"
},
{
"path": "/var/runtime",
"name": "lambda_runtime_client",
"version": null
},
{
"path": "/var/runtime",
"name": "lambda_runtime_exception",
"version": null
},
{
"path": "/var/runtime",
"name": "lambda_runtime_marshaller",
"version": null
},
{
"path": "/var/runtime",
"name": "s3transfer",
"version": "0.1.13"
},
{
"path": "/var/runtime",
"name": "six",
"version": "1.11.0"
},
{
"path": "/var/runtime",
"name": "test_bootstrap",
"version": null
},
{
"path": "/var/runtime",
"name": "test_lambda_runtime_client",
"version": null
},
{
"path": "/var/runtime",
"name": "test_lambda_runtime_marshaller",
"version": null
},
{
"path": "/var/runtime",
"name": "urllib3",
"version": "1.24.1"
},
{
"path": "/var/lang/lib/python3.7",
"name": "__future__",
"version": null
},
...
私が発見したものはまた違っていました 彼らが公式に発表しているもの. 。これを書いている時点では:
- オペレーティングシステム – Amazon Linux
- AMI – amzn-ami-hvm-2017.03.1.20170812-x86_64-gp2
- Linux カーネル – 4.14.77-70.59.amzn1.x86_64
- AWS SDK for JavaScript – 2.290.0\
- Python 用 SDK (Boto 3) – 3-1.7.74 botocore-1.10.74
あなたは以下を使用することができますPythonプログラムからpip list
を呼び出す方法を疑問に思う人のため:
import pip
pip.main(['list]) # this will print all the packages
これは役立ちます。
端末またはIPythonで、タイプ:
help('modules')
そして
In [1]: import #import press-TAB
Display all 631 possibilities? (y or n)
ANSI audiodev markupbase
AptUrl audioop markupsafe
ArgImagePlugin avahi marshal
BaseHTTPServer axi math
Bastion base64 md5
BdfFontFile bdb mhlib
BmpImagePlugin binascii mimetools
BufrStubImagePlugin binhex mimetypes
CDDB bisect mimify
CDROM bonobo mmap
CGIHTTPServer brlapi mmkeys
Canvas bsddb modulefinder
CommandNotFound butterfly multifile
ConfigParser bz2 multiprocessing
ContainerIO cPickle musicbrainz2
Cookie cProfile mutagen
Crypto cStringIO mutex
CurImagePlugin cairo mx
DLFCN calendar netrc
DcxImagePlugin cdrom new
Dialog cgi nis
DiscID cgitb nntplib
DistUpgrade checkbox ntpath
シェルから
ls site-packages
それが役に立たないなら、あなたはこれを行うことができます。
import sys
import os
for p in sys.path:
print os.listdir( p )
そして、それが生成するか見ます。