Comment puis-je obtenir une liste des modules Python installés localement?

j'aimerais obtenir une liste des modules Python qui se trouvent dans mon installation Python (UNIX server).

Comment obtenir une liste de modules Python installés dans votre ordinateur?

765
demandé sur nbro 2009-04-11 16:34:18

20 réponses

Solution

mes 50 cents pour obtenir une pip freeze - comme la liste d'un script 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)

comme doublure (trop longue):

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

donner:

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

domaine d'application

Cette solution s'applique à la portée du système ou à la portée d'un environnement virtuel, et couvre les paquets installés par setuptools , pip et ( à Dieu ne plaise ) easy_install .

Mon cas d'utilisation

j'ai ajouté le résultat de cet appel à mon serveur flasque, donc quand je l'appelle avec http://example.com/exampleServer/environment je reçois la liste des paquets installés sur virtualenv du serveur. Cela rend le débogage beaucoup plus facile.

mises en garde

j'ai remarqué un comportement étrange de cette technique, lorsque l'interpréteur Python est invoquée dans le même répertoire qu'un setup.py fichier, il ne liste pas le paquet installé par setup.py .

étapes pour reproduire:

Créer un environnement virtuel
$ cd /tmp
$ virtualenv test_env
New python executable in test_env/bin/python
Installing setuptools, pip...done.
$ source test_env/bin/activate
(test_env) $ 
Clone a git repo avec 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.

Nous avons se comporter setup.py dans /tmp/behave :

(test_env) $ ls /tmp/behave/setup.py
/tmp/behave/setup.py
Installer le paquet python à partir du git repo
(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

si nous exécutons la solution susmentionnée 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'

Si nous exécutons la solution susmentionnée 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 absent du second exemple, parce que le répertoire de travail contient le fichier behave 's setup.py .

Je n'ai trouvé aucune référence à cette question dans la documentation. Peut-être que je vais ouvrir un bug pour ça.

497
répondu Adam Matan 2017-05-23 10:31:38
help('modules')

dans un interpréteur de commandes Python/prompt.

823
répondu ChristopheD 2009-04-11 12:45:45

maintenant, ces méthodes que j'ai essayées moi-même, et j'ai obtenu exactement ce qui a été annoncé: tous les modules.

hélas, vous ne vous souciez pas beaucoup du stdlib, vous savez ce que vous obtenez avec une installation python.

vraiment, je veux que le truc que i installé.

ce qui, en fait, étonnamment, a très bien fonctionné était:

pip freeze

Qui a retourné:

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

je dis" étonnamment "parce que l'outil d'installation de paquet est l'endroit exact où l'on s'attendrait à trouver cette fonctionnalité, bien que pas sous le nom "freeze" mais l'empaquetage python est si bizarre, que je suis sidéré que cet outil ait du sens. Pip 0.8.2, Python 2.7.

228
répondu chiggsy 2011-01-16 04:01:18
  • Dans ipython , vous pouvez taper " import Onglet ".

  • dans l'interpréteur Python standard, vous pouvez taper" help('modules') ".

  • en ligne de commande, vous pouvez utiliser pydoc modules .

  • dans un script, appelez pkgutil.iter_modules() .

72
répondu Johnsyweb 2012-02-08 13:30:04

depuis la version 1.3 de pip, vous avez accès à:

pip list

qui semble être du sucre syntactique pour "PIP freeze". Il liste tous les modules spécifiques à votre installation ou virtualenv, avec leurs numéros de version. Malheureusement, il n'affiche pas le numéro de version actuel d'un module, il ne lave pas votre vaisselle ou cirer vos chaussures.

65
répondu Bryce 2013-07-25 23:30:57

Je l'utilise juste pour voir les modules actuellement utilisés:

import sys as s
s.modules.keys()

qui affiche tous les modules tournant sur votre python.

pour tous les modules encastrés utiliser:

s.modules

qui est un dict contenant tous les modules et importer des objets.

54
répondu Dan Evans 2014-01-13 10:43:55

dans la coque normale juste utiliser

pydoc modules
53
répondu DrkNess 2013-08-23 09:45:31

si nous devons lister les paquets installés dans le shell Python, nous pouvons utiliser la commande help comme suit

>>help('modules package')
19
répondu Sadheesh 2018-04-25 19:42:48

j'ai rencontré un python 2.7 installé sur OS X. Il a fallu X11 pour lister les modules installés (à la fois en utilisant l'AIDE et pydoc).

pour pouvoir lister tous les modules sans installer X11 j'ai lancé pydoc comme serveur http, i.e.:

pydoc -p 12345

il est alors possible de diriger Safari vers http://localhost:12345/ pour voir tous les modules.

11
répondu Qiau 2012-08-24 10:28:05

recherche très simple utilisant 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
répondu stuudent 2012-05-12 12:34:44

sur windows, entrez ceci dans cmd

c:\python\libs>python -m pip freeze
9
répondu Saurabh 2015-12-11 14:54:51

à partir du pip 10, la réponse acceptée ne fonctionnera plus. L'équipe de développement a retiré l'accès à la routine get_installed_distributions . Il y a une fonction alternative dans le setuptools pour faire la même chose. Voici une version alternative qui fonctionne avec 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)

s'il vous plaît, faites-moi savoir si cela fonctionnera ou non dans les versions précédentes de pip, aussi.

9
répondu Big_Al_Tx 2018-04-25 02:58:49

mis à part l'utilisation de pip freeze j'ai installé yolk dans mes environnements virtuels.

7
répondu jdsantiagojr 2015-12-02 20:56:07
  1. pour obtenir tous les modules disponibles, Lancez sys.modules
  2. pour obtenir tous les installés modules (lire: installés par pip ), vous pouvez regarder pip.get_installed_distributions()

pour le deuxième usage, exemple de code:

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
répondu yegle 2014-01-21 06:42:12

cette solution est principalement basée sur les modules importlib et pkgutil et fonctionne avec CPython 3.4 et CPython 3.5, mais n'a pas de support pour le CPython 2.


explication

  1. sys.builtin_module_names - nomme tous les modules intégrés (regardez ma réponse ici )
  2. pkgutil.iter_modules() - renvoie une information sur tous les modules disponibles
  3. importlib.util.find_spec() - retourne des informations sur le module d'importation ,s'il existe
  4. BuiltinImporter - un importateur pour les modules intégrés ( docs )
  5. SourceFileLoader - un importateur pour un module Python standard (par défaut a extension *.py) ( docs )
  6. ExtensionFileLoader - un importateur pour les modules comme bibliothèque partagée (écrit sur le C ou C++)

code complet

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

l'Utilisation de la

pour le CPython3.5 (tronqué)

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

pour le CPython3.4 (tronqué)

$ 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
répondu Seti Volkylany 2017-05-23 12:34:47

si vous avez une distribution anaconda python installée, vous pouvez aussi utiliser

$conda list

en plus des solutions décrites ci-dessus.

3
répondu Shreyas 2013-12-05 23:38:03

pip freeze est-ce qu'il trouve tous les paquets? cependant, il suffit d'écrire la commande suivante pour lister tous les chemins où se trouvent les paquets python.

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

j'utilise normalement pip list pour obtenir une liste des paquets (avec la version).

cela fonctionne aussi dans un environnement virtuel, bien sûr.

3
répondu James 2018-09-08 21:32:26

il y a beaucoup d'idées, au début je réfléchis sur ces deux:

pip

cons: pas toujours installé

aide ('modules')

contre: sortie sur console; avec des modules cassés (voir ubuntu...) peut-erreur de segmentation

j'ai besoin d'une approche facile, à l'aide de bibliothèques de base et compatible avec le vieux python 2.x

et je vois la lumière: listmodules.py

caché dans le répertoire des sources de documentation en 2.5 est un petit script qui liste tous les modules disponibles pour une installation Python.

Pour:

n'utilise que imp, sys, os, re, time

conçu pour fonctionner avec Python 1.5.2 et versions plus récentes

le code source est vraiment compact, donc vous pouvez facilement le bricoler, par exemple pour passer une liste d'exception de modules bogués (n'essayez pas de les importer)

0
répondu Massimo 2018-09-19 09:06:22

à Partir de l'interpréteur de commandes

ls site-packages

Si ce n'est pas utile, vous pouvez le faire.

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

Et voir ce que cela produit.

-9
répondu S.Lott 2009-04-11 18:38:27