Como posso obter uma lista de Módulos Python instalados localmente?

gostaria de obter uma lista de Módulos Python, que estão na minha instalação Python (servidor UNIX).

Como pode obter uma lista de Módulos Python instalados no seu computador?

Author: nbro, 2009-04-11

20 answers

Solução

Os meus 50 cêntimos por conseguir uma lista como a de uma 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)

Como uma linha (demasiado longa):

sorted(["%s==%s" % (i.key, i.version) for i in pip.get_installed_distributions()])

Dando:

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

Âmbito de aplicação

Esta solução aplica-se ao âmbito do sistema ou a um âmbito de ambiente virtual, e abrange pacotes instalados por setuptools, pip e Deus me livre) easy_install.

A minha mala de uso

Adicionei o resultado desta chamada ao meu servidor de garrafas, por isso, quando a chamo com http://example.com/exampleServer/environment obtenha a lista de pacotes instalados no virtualenv do servidor. Torna a depuração muito mais fácil.

Advertências

Notei um comportamento estranho desta técnica-quando o interpretador de Python é invocado no mesmo directório que um ficheiro setup.py, ele não lista o pacote instalado por setup.py.

Passos para a reprodução:

Criar um ambiente virtual
$ cd /tmp
$ virtualenv test_env
New python executable in test_env/bin/python
Installing setuptools, pip...done.
$ source test_env/bin/activate
(test_env) $ 
Clonar um acordo git com 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.
Nós comportamo-nos /tmp/behave:
(test_env) $ ls /tmp/behave/setup.py
/tmp/behave/setup.py
Instalar o pacote python do repo git
(test_env) $ cd /tmp/behave && python setup.py 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

Se analisarmos a solução acima mencionada de /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'

Se analisarmos a solução acima mencionada de /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 está em falta no segundo exemplo, porque a pasta de trabalho contém o ficheiro behave'S setup.py.

Não encontrei qualquer referência a este assunto na documentação. Talvez eu abra uma escuta.
 497
Author: Adam Matan, 2017-05-23 10:31:38
help('modules')

Numa linha de comandos em Python.

 823
Author: ChristopheD, 2009-04-11 12:45:45
Agora, esses métodos eu tentei a mim mesmo, e consegui exatamente o que foi anunciado: todos os módulos. Infelizmente, realmente você não se importa muito com o stdlib, você sabe o que você consegue com uma instalação python.

Realmente, eu quero o material que instalado.

O que, surpreendentemente, funcionou muito bem foi:
pip freeze

Que voltou:

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

Eu digo "surpreendentemente" porque a ferramenta de instalação de pacotes é o lugar exato que se esperaria encontrar este funcionalidade, embora não sob o nome 'freeze', mas Embalagem python é tão estranho, que eu estou flabbergasted que esta ferramenta faz sentido. Pip 0.8.2, Python 2.7.

 228
Author: chiggsy, 2011-01-16 04:01:18
  • Em ipython Você pode digitar "importTab ".

  • No interpretador Python padrão, você pode digitar " help('modules')".

  • Na linha de comando, você pode usar pydoc modules.

  • Num guião, chama pkgutil.iter_modules().

 72
Author: Johnsyweb, 2012-02-08 13:30:04

Desde a versão 1.3 do pip, tens acesso a:

pip list
O que parece ser açúcar sintático para"pip freeze". Ele listará todos os módulos particulares para sua instalação ou virtualenv, juntamente com seus números de versão. Infelizmente, ele não mostra o número de versão atual de qualquer módulo, nem lava seus pratos ou engraxa seus sapatos.
 65
Author: Bryce, 2013-07-25 23:30:57

Só uso isto para ver os módulos actualmente utilizados:

import sys as s
s.modules.keys()

Que mostra todos os módulos em execução na sua python.

Para todos os módulos incorporados, utilizar:

s.modules

Que é um dict que contém todos os módulos e objectos de importação.

 54
Author: Dan Evans, 2014-01-13 10:43:55

Com uma concha normal, basta usar

pydoc modules
 53
Author: DrkNess, 2013-08-23 09:45:31

Se precisarmos de listar os pacotes instalados na shell Python, podemos usar o comando help como se segue

>>help('modules package')
 19
Author: Sadheesh, 2018-04-25 19:42:48

Encontrei um python 2.7 personalizado instalado no OS X. Foi necessário que o X11 listasse os módulos instalados (tanto com a ajuda como com o pydoc).

Para ser capaz de listar todos os módulos sem instalar o X11, executei o pydoc como Servidor http, ou seja:

pydoc -p 12345

Então é possível direcionar Safari para http://localhost:12345/ para ver todos os módulos.

 11
Author: Qiau, 2012-08-24 10:28:05

Procura muito simples usando o pkgutil.iter_módulos

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
Author: stuudent, 2012-05-12 12:34:44

Nas janelas, digite isto em cmd

c:\python\libs>python -m pip freeze
 9
Author: Saurabh, 2015-12-11 14:54:51

A partir do pip 10, a resposta aceite deixará de funcionar. A equipa de desenvolvimento removeu o acesso à rotina get_installed_distributions. Há uma função alternativa no setuptools para fazer a mesma coisa. Aqui está uma versão alternativa que funciona com o 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)

Por favor, avise-me se irá ou não funcionar em versões anteriores do pip, também.

 9
Author: Big_Al_Tx, 2018-04-25 02:58:49

Além de usar {[[0]} tenho estado a instalar yolk nos meus ambientes virtuais.

 7
Author: jdsantiagojr, 2015-12-02 20:56:07
  1. para obter todos os módulos disponíveis, execute sys.modules
  2. para obter todos os instalados (Leia: instalados por pip), pode olhar para pip.get_installed_distributions()

Para a segunda finalidade, código de exemplo:

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
Author: yegle, 2014-01-21 06:42:12

Esta solução é primária baseada nos Módulos importlib e pkgutil e trabalha com o CPython 3.4 e o CPython 3.5, mas não tem suporte para o CPython 2.


Anotações

  1. sys.builtin_module_names - nomeia todos os módulos incorporados (veja a minha resposta aqui)
  2. pkgutil.iter_modules() - devolve uma informação sobre todos os módulos disponíveis
  3. importlib.util.find_spec() - devolve uma informação sobre a importação do módulo, se existir
  4. BuiltinImporter - um importador de módulos incorporados ([29]}docs)
  5. SourceFileLoader - um importador para um módulo Python padrão (por omissão tem a extensão *. py) (docs)
  6. ExtensionFileLoader - um importador de módulos como Biblioteca partilhada (escrita em C ou C++)

Código Completo

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()

Utilização

Para o CPython3. 5 (truncado)

$ 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*******************************)

Para o CPython3. 4 (truncado)

$ 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
Author: Seti Volkylany, 2017-05-23 12:34:47

No caso de ter uma distribuiçãode anaconda python instalada, Poderá também usar

$conda list

Além das soluções acima descritas.

 3
Author: Shreyas, 2013-12-05 23:38:03

O Pip freeze faz com que tudo encontre pacotes, no entanto, pode-se simplesmente escrever o seguinte comando para listar todos os locais onde os pacotes python estão.

>>> import site; site.getsitepackages()
['/usr/local/lib/python2.7/dist-packages', '/usr/lib/python2.7/dist-packages']
 3
Author: Pavan Gupta, 2016-04-21 10:52:02

Normalmente uso pip list para obter uma lista de pacotes (com a versão).

Isto também funciona num ambiente virtual, claro.
 3
Author: James, 2018-09-08 21:32:26

Há muitas ideias, inicialmente estou a ponderar sobre estas duas:

Pip

Cons: nem sempre instalado

Ajuda ('módulos')

Cons: saída para consola; com módulos quebrados (ver ubuntu...) can segfault

Preciso de uma abordagem fácil, usando bibliotecas básicas e compatíveis com o python 2 antigo.x

E eu vejo a luz: listmodules.py

Escondido na pasta de origem da documentação em 2.5 é um pequeno script que lista todos os módulos disponíveis para uma instalação em Python.

Prós:

Usa apenas imp, sys, os, re, time

Desenhado para correr no Python 1.5.2 e mais recente

O código-fonte é realmente compacto, por isso pode ser fácil alterá-lo, por exemplo para passar uma lista de excepções de módulos buggy (não tente importá-los)

 0
Author: Massimo, 2018-09-19 09:06:22

Da concha

ls site-packages
Se isso não ajudar, podes fazer isto.
import sys
import os
for p in sys.path:
    print os.listdir( p )
E vê o que isso produz.
 -9
Author: S.Lott, 2009-04-11 18:38:27