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

StackOverflow https://stackoverflow.com/questions/739993

  •  09-09-2019
  •  | 
  •  

質問

Python インストール (UNIX サーバー) にある Python モジュールのリストを取得したいと考えています。

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

役に立ちましたか?

解決

解決

pip > 10.0 では使用しないでください。

を手に入れるために私の50セント pip freezePython スクリプトのようなリスト:

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オプションを示すのドキュメントですます。

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]

私は(両方の助けと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

このは(受け入れられたもの)をに答えるhref="https://stackoverflow.com/a/23885252/277267">アダムMatanの

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を経由して、一度パケットをインストールするときに、他の1がリストされていないように、1が優先されることに気付きました(唯一の場所が示されています)。私は、ローカルディレクトリで唯一、次にリストされていることを信じています。これを向上させることができた。

別にpip freezeを使用してから私は自分の仮想環境で卵黄にインストールされています。

  1. 利用可能なすべてのモジュールを取得するには、実行します sys.modules
  2. すべてを手に入れるために インストールされています モジュール (読み取り:によってインストールされました 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 はサポートされていません。


説明

  1. sys.builtin_module_names - すべての組み込みモジュールに名前を付けます(私の答えを見てください) ここ)
  2. pkgutil.iter_modules() - 利用可能なすべてのモジュールに関する情報を返します。
  3. importlib.util.find_spec() - モジュールのインポートに関する情報が存在する場合は返します。
  4. BuiltinImporter - 組み込みモジュールのインポーター (ドキュメント)
  5. SourceFileLoader - 標準 Python モジュールのインポーター (デフォルトでは拡張子 *.py が付いています) (ドキュメント)
  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 __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分布には、あなたも使用することができますインストールされている。

$conda list

上記溶液に加えます。

ピップフリーズ パッケージの検索はすべて行いますが、次のコマンドを記述するだけで、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


enter image description here

これらを試してみてください
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 )

そして、それが生成するか見ます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top