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


998

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

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


77
>>> help()を実行してから>>> modules
Julius Naeumannを2014年

1
代わりはありますか?help()がハングします。
Paulo Carvalho

2
これらの回答の多くは、コマンドラインにアクセスできることを前提としています。AWS Lambdaを使用している場合は、すべてPython内から実行する必要があります。stackoverflow.com/a/54939905/117471を
Bruno Bronosky

回答:


610

解決

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

pip freezePythonスクリプトから-のようなリストを取得するための50セント:

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']

範囲

このソリューションは、システムスコープまたは仮想環境スコープに適用されsetuptoolspipおよび(god forbid)によってインストールされたパッケージを対象としています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 repoから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作業ディレクトリにbehavesetup.pyファイルが含まれているため、2番目の例にはがありません。

ドキュメントにこの問題への言及はありませんでした。多分私はそれのためにバグをオープンするでしょう。


5
この回答ありがとうございます!私は「ローカルに」インストールされたPythonモジュールを尋ねるので、この質問に答える方が良いと思います。Pipのフリーズも、常に実行できるわけではありません。これはうまくいくと思います。
レオ・レオポルド・ヘルツ준 영

3
@Masiはこのソリューションの警告の詳細な説明を追加しました。それは確かに奇妙なものです。
Adam Matan 14年

21
別の方法:import pkg_resources; installed_packages = [(d.project_name, d.version) for d in pkg_resources.working_set]
ebolyen、

14
ピップ10以降、この回答は機能しなくなります。@ebolyenからのコメントは、機能する代替コマンドを示しています。私は同じ結論に達し、以下の完全に改訂されたコードを投稿しました。
Big_Al_Tx 2018

5
最近のバージョンのpipでは、これは機能せず、というエラーメッセージが表示されますAttributeError: module 'pip' has no attribute 'get_installed_distributions'
HelloGoodbye 2018

1039
help('modules')

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


10
@dFはpydoc modules機能します。回答として提出してください。
Abizern 2009

37
私にワンセグの欠陥を与えた!
zanbri 2013年

3
nobar、zanbri、@ Joe Frambach:Ubuntuで?ここに説明されているバグがあります:bugs.launchpad.net/ubuntu/+source/python2.7/+bug/896836
ChristopheD

2
モジュールがインストールされている場所と現在のバージョンは何ですか?
好奇心が強い

5
python -c 'help("modules")'
ケノーブ

285

さて、これらの方法を自分で試してみたところ、宣伝されているとおりの結果が得られました。すべてのモジュールです。

悲しいかな、本当にあなたはstdlibをあまり気にしません、あなたはpythonのインストールで何が得られるか知っています。

本当に、私インストールされています。

実際、驚くべきことに、うまく機能したのは次のとおりです。

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。


4
名前の背後にある考えは、現在インストールされているものの「凍結」スナップショットを取得することだと思います。これを後でpipにフィードバックして、まったく同じモジュールを別の環境にインストールできます。
ライアンC.トンプソン、

Arash、pipはWindowsにもインストールできます。最初にsetuptoolsをインストールし、次にeasy_installを使用してpipをインストールします:)
gawbul

これは素晴らしいですが、私がインストールしたライブラリのいくつかを見逃しているようです。たとえば、PyQtは表示されません。
Junuxx

8
pip 1.3以降、listコマンドがあります。
Piotr Dobrogost 2013年

できます。乱雑なpythonとは何か。彼らが一緒に行動して、Railsに存在するものと同様のソリューションを考え出せないのはなぜですか?(Gemfile、bundle、rvm)
Dimitris

106

pipバージョン1.3以降、次のものにアクセスできます。

pip list

これは「ピップフリーズ」の構文上の砂糖のようです。インストールまたはvirtualenvに固有のすべてのモジュールが、バージョン番号とともに一覧表示されます。残念ながら、モジュールの現在のバージョン番号は表示されず、食器洗いや靴磨きも行われません。


4
ここ説明されているとグローバルサイトパッケージpip list --localを区別するためのものもありますvirtualenv
Ioannis Filippidis 2014

1
断然最高。また、バージョンも取得します。
aerijman

pip list最もシンプルで最高です。ここではオプションと詳細です。
Levi Baguley

86
  • ではipython、あなた「と入力することができますimportTab」。

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

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

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


5
pkgutil.iter_modules()上記のpipソリューションはすべてのパッケージを一覧表示するのではなく、pipを介してインストールされたパッケージのみを一覧表示します。
metaperture

2
驚くばかり!質問されて以来、ドキュメントは改善されたと思います。pydocモジュールspamはモジュールのドキュメントでspamを検索します。最後のポイントは、モジュールを使用するための十分な情報を提供するようです。@metaperture pkgutil.iter_modules()によってインストールされたすべてのローカルモジュール(help( 'modules')によるstlibの大規模なリストではない)を一覧表示する方法の例を挙げてください。
レオ・レオポルド・ヘルツ준 영

2
@LéoLéopoldHertz준영次のスニペットを試してくださいpython -c 'import pkgutil;print [x[1] for x in list(pkgutil.iter_modules())]'。すべてのモジュール名を1つの非常に大きなPythonリストとしてダンプする必要があります。このx[1]ビットは、によって生成されたタプルからモジュール名を取り出すために使用されpkgutil.iter_modules()ます。
フィリップコンラッド

76

これを使用して、現在使用されているモジュールを確認します。

import sys as s
s.modules.keys()

Pythonで実行されているすべてのモジュールが表示されます。

すべての組み込みモジュールの使用:

s.modules

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


2
#sys "import sys as s"をインポートした後、次のコマンドで印刷できます。print sys.modules.keys()
Dan Evans

私の投稿が編集された理由はわかりませんが、以前の投稿の誤りを修正するために投稿した情報を使用していただきありがとうございます。help()とhelp( '')を使用すると、エラーが返されます。これは、dir( '')やsys( '')などにも当てはまります。これが役に立ち、削除されないことを願っています。
Dan Evans

最後の投稿は無視してください。この投稿は編集されていません。私はここにある同様の投稿を考えていました: stackoverflow.com/questions/139180/…混乱してすみません。
Dan Evans

7
これは賛成です。これは、インストールpydocpipインストールもされていない制約付きシステム(私の場合はNAS)で機能するように見える唯一の方法だからです。
トーマス

1
トーマスに同意した。たとえばrepl.itを使用していますが、これも制約されたタイプの環境です。help('modules')応答せずにハングアップします。しかし、このアプローチはsys完全に機能します
セルギーコロディアズニー

63

通常のシェルでは単に使う

pydoc modules

上記は 'nixプラットフォームでのみ機能するようです。いずれにせよ、スクリプトを見つけて実行し、コマンドを次のように変更しました。数。私はパスします。
デビッドA.グレイ

2
@ DavidA.Gray Python 3を搭載したWindowsマシンでこれを試したところ、実際に機能しました。Pythonウィンドウランチャーを使用するとpy -m pydoc modules、cmdまたはPowershellで実行できます。
VKK 2018年

pydoc modulesPython 3.6を搭載したWindows 10では動作しませんでしたが、@ VKKの変更:py -m pydoc modulescmd / Powershell では動作します。
マーティン

41

pip 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でも動作するかどうかをお知らせください。


2
私はこの解決策を探していて、pkg_resourcesを理解しようとして頭を悩ませていました。これを複数回賛成できるとしたら、そうします。@Big_Al_Txありがとうございます!更新:例外...仮想環境で「pipフリーズ」を実行し、これをこの出力と比較すると、不足しているパッケージがあります。それがなぜ起こり得る/起こり得るのかについての考えは?
numberwhun

@numberwhun-これがうまくいったことを嬉しく思います。申し訳ありませんが、との不一致については回答がありませんpip freeze。このトピックに関する私の知識の深さはかなり限られています。受け入れられた回答がうまくいかなかったとき、私は解決策にたどり着きましたsetuptools。それを関連する回答と組み合わせて試してみました。
Big_Al_Tx 2018

github.com/pypa/pip/issues/5243-へのアクセスの削除に関する開発チームの話get_installed_distributions routine
bl79 2018

@ bl79-私はそれが私がのリファレンスを得た正確な場所だと思いますsetuptools
Big_Al_Tx 2018

@Big_Al_Tx:まあ、私はsetuptoolsオプション(自分のニーズに合わせて難読化するのはかなりおかしかった)を回避しましたが、私はこれを使用しました:installed_pkgs = subprocess.check_output(['pip'、 'freeze'])それを行う必要がありました。
numberwhun 2018

26

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

>>help('modules package')

22

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

もちろん、これは仮想環境でも機能します。(グローバルパッケージではなく)仮想環境のみにインストールされているものを表示するには、を使用しますpip list --local

pip listいくつかの良い例とともに、利用可能なすべてのオプションを示すドキュメントです。


13

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]

forループの代わりにwhileを使用する理由はありますか?私は使用for m in iter_modules()して書いたが、それもうまくいった。
Joao Ponte

13

Windowsでは、これをcmdに入力します

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

これは私のために働いた:python3 -m pip freeze-python 3.5.3。
dpminusa

これは適切に機能し、変数が定義されている場合はlibsディレクトリにいる必要はありません
mcy

12

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

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

pydoc -p 12345

その後、http://localhost:12345/すべてのモジュールを表示するようにSafariに指示することができます。



12

これは役立ちます

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

これは受け入れられる答えになるはずです!1行:)
AlmostPitt

9

このソリューションは主にモジュールに基づいて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-組み込みモジュールのインポーター(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 __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*******************************)

あなたはここにアダムのアプローチにあなたのアプローチを比較してくださいすることができstackoverflow.com/a/23885252/54964を
レオ・レオポルド・ヘルツ준 영

@LéoLéopoldHertz、なぜそれが必要なのですか?
PADYMKO 2017年

あなたのアプローチがアダムのアプローチよりも良い/悪い方法を理解する。
レオ・レオポルド・ヘルツ준 영

1
@レオレオポルドハーツ。短い答え:自分でプロダクションで試して、自分で結論を導き出してください。長い答え:Adamのアプローチはpip、Pythonで記述されたソフトウェアパッケージのインストールと管理に使用されるパッケージ管理システムに基づいており、その結果pip.get_installed_distributions()、pipでインストールされたモジュールが返されます。私の回答は完全にPythonの標準ライブラリに基づいており、インポート可能なすべてのモジュールをカバーしています。最大の欠点は私の答え
-CPython

1
@LéoLéopoldHertzあなたが間違っている、それはそれをします。コンピューターでテストしました。私の答えには**truncated**、出力が切り捨てられるという特別な意味があります。注意していないかもしれませんが、そうでない場合は、システムとPythonの実装に関する情報を送信するために、修正のためにさらに調査を行います。
PADYMKO 2017年

9

警告:Adam Matanは、pip> 10.0でのこの使用を推奨していません。また、以下の@sinorocのコメントを読んでください

これは、Adam 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


補足:パケットを1回経由でインストールする場合sudoと1 回インストールしない場合は、一方が優先されるため、もう一方がリストされない(1つの場所のみが表示される)ことに気付きました。ローカルディレクトリの1つだけがリストに表示されると思います。これは改善される可能性があります。


1
いいえ。これはお勧めしません。ここを参照してください:pip.pypa.io/en/stable/user_guide/#using-pip-from-your-program
sinoroc

1
@sinorocご指摘ありがとうございます。ポイント1〜3は、このソリューションには適用できないようです。このスクリプトは、pip一度使用して終了するという唯一の目的があるためです。これは、動作が変化する可能性があるという問題のようです。
ダニエルF

同意します。パブリックAPIがない理由は、この特定のコードには当てはまりません。ただし、pipはパブリックAPIを保証するものではないため、以前のように、後のリリースで内部API、コード構造などを自由に変更できます。これが、このコードにtry / exceptがあり、内部APIがパブリックAPIではない内部API(_internal)であることを明確にすることを目的とした以前の内部コード再編成をキャッチする理由です。全体として、それは明らかに機能しますが、悪い習慣です。より良い代替案があり、いくつかはこの質問の他の回答にあります。
sinoroc

1
「pip」モジュールがない場合、このスクリプトは機能しません。
Alexander Stohr


6

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

$conda list

上記のソリューションに加えて。


この行はどこで/どのように実行しますか?
HuckIt 2014

UNIX / Mac OS Xマシンを使用している場合は、ターミナルを開いて「」と入力するだけconda installで動作します:)
Shreyas

私はWindows 7マシンを使用しています。実際にパスで見つけましたが、conda.exeはAppData \ Local \ Continuum \ Anaconda \ Scriptsにあります。
HuckIt 2014

6
  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

コマンドsys.modulesは、最新のOSXのPythonでは機能しません。NameError:名前「system」が定義されていません
レオ・レオポルド・ヘルツ준 영

@Masi意味ですか/usr/bin/pythonそれともpython.orgからのものですか?前者sys.modulesは問題なく使用できます。
yegle 2014年

/ usr / bin / pythonを意味します。
レオ・レオポルド・ヘルツ준 영

@Masiまだこの問題に関心があるかどうかわかりません。どうやらあなたはのsystem.modules代わりに使っていますsys.modules
yegle

笑。私の間違いは、最初にsys -packageをインポートしなかったことです。したがって、代わりにimport sysを実行します。sys.modulesは期待どおりに動作します。
レオ・レオポルド・ヘルツ준 영

6

Pip 20などの最新バージョンの場合

PythonエディターまたはIPythonで以下を実行します。

import pkg_resources; 
installed_packages = {d.project_name: d.version for d in pkg_resources.working_set}
print(installed_packages)

他の答えを読んで、このコンボをまとめてください。これはPython内で最も速くて簡単です。


4

pip freezeはすべてのパッケージ検索を実行しますが、次のコマンドを記述するだけで、Pythonパッケージが存在するすべてのパスを一覧表示できます。

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

4

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

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

  • ただし、詳細については、インストール日も通知するpip-dateというツールを使用してください。
    pip install pip-date


ここに画像の説明を入力してください


3

多くのアイデアがありますが、最初はこれら2つについて考えています。

ピップ

短所:常にインストールされるわけではない

ヘルプ( 'モジュール')

短所:コンソールへの出力; 壊れたモジュール(ubuntuを参照...)を使用すると、セグメンテーション違反が発生する可能性があります

基本的なライブラリを使用し、古いPython 2.xと互換性のある簡単なアプローチが必要です

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

2.5のドキュメントソースディレクトリには、Pythonインストールで使用可能なすべてのモジュールをリストする小さなスクリプトがあります。

長所:

imp、sys、os、re、timeのみを使用

Python 1.5.2以降で実行するように設計されています

ソースコードは本当にコンパクトなので、バグの多いモジュールの例外リストを渡すなど、簡単にいじることができます(インポートしないでください)。


3

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 \
  • SDK for Python(Boto 3)– 3-1.7.74 botocore-1.10.74

1

取り付け

pip install pkgutil

コード

import pkgutil

for i in pkgutil.iter_modules(None): # returns a tuple (path, package_name, ispkg_flag)
    print(i[1]) #or you can append it to a list

出力例:

multiprocessing
netrc
nntplib
ntpath
nturl2path
numbers
opcode
pickle
pickletools
pipes
pkgutil

1

以下は、インストールされているモジュールのリストを返すpythonコードソリューションです。コードを簡単に変更して、バージョン番号を含めることができます。

import subprocess
import sys
from pprint import pprint

installed_packages = reqs = subprocess.check_output([sys.executable, '-m', 'pip', 'freeze']).decode('utf-8')
installed_packages = installed_packages.split('\r\n')
installed_packages = [pkg.split('==')[0] for pkg in installed_packages if pkg != '']
pprint(installed_packages)


-10

シェルから

ls site-packages

それが役に立たない場合は、これを行うことができます。

import sys
import os
for p in sys.path:
    print os.listdir( p )

そして、それが生み出すものを見てください。


どのサイトパッケージディレクトリ?これはより良いかもしれません:ls / usr / {local /、} lib / python $(python -V 2>&1 | cut -d "" -f2 | cut -d。-f1-2)/ site-packages
vezult

また、この内蔵モジュールを示し、またはカスタムPYTHONPATHのモジュール、またはものはsetuptoolsの「開発モード」などにインストールされていないだろう
のdF。

モジュールをインストールしましたが、/ usr / local / lib / python2.5 / site-packagesは空です。
レオ・レオポルド・ヘルツ준 영

14
この反対投票の回答を削除しないことに対する称賛。一般的な回答が間違っていると見なされる理由を確認できると、コミュニティにとって役立ちます。
ジェレミースタイン

1
@JeremyStein Aより良い戦略(より有用とおそらくあまりREP-損傷)は、おそらくこれがされたら、それの間違ったが、コメントで説明した理由を説明するための質問を編集になります...
カイルストランド
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.