私のPythonインストール(UNIXサーバー)にあるPythonモジュールのリストを入手したいです。
コンピュータにインストールされているPythonモジュールのリストをどのようにして取得できますか?
help('modules')
pythonシェル/プロンプトで。
さて、これらの方法を試してみたところ、宣伝されていたものがすべて得られました。すべてのモジュール。
残念ながら、実際にはstdlibについてあまり気にしていません。Pythonインストールで何が得られるか知っています。
本当に、 _ i _ というものが欲しいのです。
驚くべきことに、実際にうまく機能したのは、次のとおりです。
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
「フリーズ」という名前ではありませんが、パッケージインストールツールがこの機能を見つけるために期待される正確な場所であるため、「驚くほど」と言っています。 Pip 0.8.2、Python 2.7。
ipython
には "import
"と入力できます。Tab"#:。
標準のPythonインタプリタでは、 "help('modules')
"と入力できます。
コマンドラインでは、 pydoc
modules
を使用できます。
スクリプトで、 pkgutil.iter_modules()
を呼び出します。
PIPバージョン1.3以降、次のものにアクセスすることができます。
pip list
これは "ピップフリーズ"のための構文糖であるようです。それはあなたのインストールまたはvirtualenvに特定のすべてのモジュールをそれらのバージョン番号と共にリストします。残念ながら、モジュールの現在のバージョン番号を表示することも、皿を洗ったり、靴を磨くこともありません。
現在使用されているモジュールを見るためにこれを使用します。
import sys as s
s.modules.keys()
これはあなたのPythonで動いているすべてのモジュールを示しています。
すべての組み込みモジュールに対して、
s.modules
これはすべてのモジュールとインポートオブジェクトを含む辞書です。
通常のShellではそのまま使う
pydoc modules
ピップ10の時点で、受け入れられた答えはもはや働かないでしょう。開発チームはget_installed_distributions
ルーチンへのアクセスを削除しました。同じことをするためのsetuptools
に別の関数があります。これは、pip 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)
それが以前のバージョンのpipでも機能するかどうかを教えてください。
インストールされているパッケージをPythonシェルにリストする必要がある場合は、次のようにhelp
コマンドを使用できます
>>help('modules package')
私はOS X上でカスタムインストールされたpython 2.7に遭遇しました。インストールされたモジュールを一覧表示するにはX 11が必要でした(helpとpydocの両方を使って)。
X11をインストールせずにすべてのモジュールを一覧表示できるようにするには、pydocをhttp-serverとして実行しました。
pydoc -p 12345
それから、すべてのモジュールを見るためにSafariをhttp://localhost:12345/
に向けることは可能です。
pkgutil.iter_modules を使用した非常に単純な検索
from pkgutil import iter_modules
a=iter_modules()
while True:
try: x=a.next()
except: break
if 'searchstr' in x[1]: print x[1]
windowsではcmdで入力
c:\python\libs>python -m pip freeze
私は通常pip list
を使って(バージョン付きの)パッケージのリストを取得します。
これはもちろん仮想環境でも機能します。
pip freeze
を使う以外に、私は自分の仮想環境に yolk をインストールしています。
このソリューションは、モジュールimportlib
とpkgutil
に基づいており、CPython 3.4とCPython 3.5で動作しますが、CPython 2はサポートしていません。
説明
sys.builtin_module_names
- すべての組み込みモジュールの名前(私の答えを見てください ここ )pkgutil.iter_modules()
- 利用可能なすべてのモジュールに関する情報を返しますimportlib.util.find_spec()
- 存在する場合、モジュールのインポートに関する情報を返しますBuiltinImporter
- 組み込みモジュールのインポーター( docs )SourceFileLoader
- 標準Pythonモジュールのインポーター(デフォルトで拡張子は* .pyです)( docs )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 __== '__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*******************************)
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
pipフリーズ それはすべてのパッケージを見つけることができますが、pythonパッケージがあるすべてのパスをリストするために次のコマンドを書くことができます。
>>> import site; site.getsitepackages()
['/usr/local/lib/python2.7/dist-packages', '/usr/lib/python2.7/dist-packages']
これらを試してください
pip list
または
pip freeze
これはAdam Matanの answer (受け入れられたもの)に触発されました。
import tabulate
try:
from pip import get_installed_distributions
except:
from pip._internal.utils.misc import get_installed_distributions
tabpackages = []
for _, package in sorted([('%s %s' % (i.location, i.key), i) for i in get_installed_distributions()]):
tabpackages.append([package.location, package.key, package.version])
print(tabulate.tabulate(tabpackages))
それはそれからの形でテーブルをプリントアウトします
19:33 pi@rpi-v3 [iot-wifi-2] ~/python$ python installed_packages.py
------------------------------------------- -------------- ------
/home/pi/.local/lib/python2.7/site-packages enum-compat 0.0.2
/home/pi/.local/lib/python2.7/site-packages enum34 1.1.6
/home/pi/.local/lib/python2.7/site-packages pexpect 4.2.1
/home/pi/.local/lib/python2.7/site-packages ptyprocess 0.5.2
/home/pi/.local/lib/python2.7/site-packages pygatt 3.2.0
/home/pi/.local/lib/python2.7/site-packages pyserial 3.4
/usr/local/lib/python2.7/dist-packages bluepy 1.1.1
/usr/local/lib/python2.7/dist-packages click 6.7
/usr/local/lib/python2.7/dist-packages click-datetime 0.2
/usr/local/lib/python2.7/dist-packages construct 2.8.21
/usr/local/lib/python2.7/dist-packages pyaudio 0.2.11
/usr/local/lib/python2.7/dist-packages tabulate 0.8.2
------------------------------------------- -------------- ------
これにより、Sudo
の有無にかかわらず、どのパッケージをインストールしたかを簡単に識別できます。
念のために言っておきますが、私はSudo
を介してパケットを一度インストールした場合とそうでない場合には、一方が優先されるのでもう一方は表示されないことに気付きました。ローカルディレクトリにあるものだけが表示されると思います。これは改善されるかもしれません。
たくさんのアイデアがあります、最初はこれら二つについて考えています:
pip
短所:必ずしもインストールされていない
help( 'modules')
短所:コンソールへの出力。モジュールが壊れていると(ubuntu ...を参照)、セグメンテーション違反になる可能性があります。
基本的なライブラリを使用し、古いpython 2.xと互換性のある簡単な方法が必要です。
そして私は光を見る: listmodules.py
2.5のドキュメントソースディレクトリに隠されているのは、Pythonインストールで利用可能なすべてのモジュールをリストアップした小さなスクリプトです。
長所:
imp、sys、os、re、timeだけを使います
python 1.5.2以降で動作するように設計されています
ソースコードは非常にコンパクトなので、たとえばバグのあるモジュールの例外リストを渡すなど、簡単に手を加えることができます(インポートしないでください)。
猫の皮をむく方法はたくさんあります。
最も簡単な方法は、シェルから直接pydoc
関数を使用することです。pydoc modules
しかし、より多くの情報を得るためには pip-date と呼ばれるツールを使ってください。pip install pip-date
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
- JavaScript用AWS SDK - 2.290.0 \
- Python用SDK(Boto 3) - 3-1.7.74 botocore-1.10.74
ターミナルまたは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
Pythonプログラムからpip list
を呼び出す方法を知りたい場合は、次を使用できます。
import pip
pip.main(['list]) # this will print all the packages