web-dev-qa-db-ja.com

ローカルにインストールされたPythonモジュールのリストを取得するにはどうすればいいですか?

私のPythonインストール(UNIXサーバー)にあるPythonモジュールのリストを入手したいです。

コンピュータにインストールされているPythonモジュールのリストをどのようにして取得できますか?

help('modules')

pythonシェル/プロンプトで。

877
ChristopheD

さて、これらの方法を試してみたところ、宣伝されていたものがすべて得られました。すべてのモジュール。

残念ながら、実際には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。 

241
chiggsy
  • ipython には "import"と入力できます。Tab"#:。

  • 標準のPythonインタプリタでは、 "help('modules')"と入力できます。

  • コマンドラインでは、 pydocmodulesを使用できます。

  • スクリプトで、 pkgutil.iter_modules() を呼び出します。

80
Johnsyweb

PIPバージョン1.3以降、次のものにアクセスすることができます。

pip list

これは "ピップフリーズ"のための構文糖であるようです。それはあなたのインストールまたはvirtualenvに特定のすべてのモジュールをそれらのバージョン番号と共にリストします。残念ながら、モジュールの現在のバージョン番号を表示することも、皿を洗ったり、靴を磨くこともありません。

71
Bryce

現在使用されているモジュールを見るためにこれを使用します。

import sys as s
s.modules.keys()

これはあなたのPythonで動いているすべてのモジュールを示しています。

すべての組み込みモジュールに対して、

s.modules

これはすべてのモジュールとインポートオブジェクトを含む辞書です。

58
Dan Evans

通常のShellではそのまま使う

pydoc modules
58
DrkNess

ピップ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でも機能するかどうかを教えてください。

22
Big_Al_Tx

インストールされているパッケージをPythonシェルにリストする必要がある場合は、次のようにhelpコマンドを使用できます

>>help('modules package')
21
Sadheesh

私はOS X上でカスタムインストールされたpython 2.7に遭遇しました。インストールされたモジュールを一覧表示するにはX 11が必要でした(helpとpydocの両方を使って)。

X11をインストールせずにすべてのモジュールを一覧表示できるようにするには、pydocをhttp-serverとして実行しました。

pydoc -p 12345

それから、すべてのモジュールを見るためにSafariをhttp://localhost:12345/に向けることは可能です。

11
Qiau

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]
10
stuudent

windowsではcmdで入力

c:\python\libs>python -m pip freeze
9
Saurabh

私は通常pip listを使って(バージョン付きの)パッケージのリストを取得します。

これはもちろん仮想環境でも機能します。

8
James

pip freezeを使う以外に、私は自分の仮想環境に yolk をインストールしています。

7
jdsantiagojr

このソリューションは、モジュールimportlibpkgutilに基づいており、CPython 3.4とCPython 3.5で動作しますが、CPython 2はサポートしていません。


説明

  1. sys.builtin_module_names - すべての組み込みモジュールの名前(私の答えを見てください ここ
  2. pkgutil.iter_modules() - 利用可能なすべてのモジュールに関する情報を返します
  3. importlib.util.find_spec() - 存在する場合、モジュールのインポートに関する情報を返します
  4. BuiltinImporter - 組み込みモジュールのインポーター( docs
  5. SourceFileLoader - 標準Pythonモジュールのインポーター(デフォルトで拡張子は* .pyです)( docs
  6. 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*******************************)
6
Seti Volkylany
  1. 利用可能なすべてのモジュールを取得するには、sys.modulesを実行します。
  2. すべての installed モジュールを入手するには(read: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
6
yegle

pipフリーズ それはすべてのパッケージを見つけることができますが、pythonパッケージがあるすべてのパスをリストするために次のコマンドを書くことができます。

>>> import site; site.getsitepackages()
['/usr/local/lib/python2.7/dist-packages', '/usr/lib/python2.7/dist-packages']
4
Pavan Gupta

これらを試してください

pip list

または

pip freeze
3
Amit Gupta

これは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を介してパケットを一度インストールした場合とそうでない場合には、一方が優先されるのでもう一方は表示されないことに気付きました。ローカルディレクトリにあるものだけが表示されると思います。これは改善されるかもしれません。

3
Daniel F

anaconda pythonディストリビューション がインストールされている場合には、

$conda list

上記の解決策に加えて。

3
Shreyas

たくさんのアイデアがあります、最初はこれら二つについて考えています:

pip

短所:必ずしもインストールされていない

help( 'modules')

短所:コンソールへの出力。モジュールが壊れていると(ubuntu ...を参照)、セグメンテーション違反になる可能性があります。

基本的なライブラリを使用し、古いpython 2.xと互換性のある簡単な方法が必要です。

そして私は光を見る: listmodules.py

2.5のドキュメントソースディレクトリに隠されているのは、Pythonインストールで利用可能なすべてのモジュールをリストアップした小さなスクリプトです。

長所:

imp、sys、os、re、timeだけを使います

python 1.5.2以降で動作するように設計されています

ソースコードは非常にコンパクトなので、たとえばバグのあるモジュールの例外リストを渡すなど、簡単に手を加えることができます(インポートしないでください)。

2
Massimo

猫の皮をむく方法はたくさんあります。

  • 最も簡単な方法は、シェルから直接pydoc関数を使用することです。
    pydoc modules

  • しかし、より多くの情報を得るためには pip-date と呼ばれるツールを使ってください。
    pip install pip-date


enter image description here

1
not2qubit

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
0
Bruno Bronosky

これは役立ちます

ターミナルまたは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
0
X Personified

Pythonプログラムからpip listを呼び出す方法を知りたい場合は、次を使用できます。

import pip
pip.main(['list])  # this will print all the packages
0
Marcelo Villa