Frage Wie kann ich eine Liste der lokal installierten Python-Module erhalten?


Ich möchte eine Liste von Python-Modulen bekommen, die sich in meiner Python-Installation (UNIX-Server) befinden.

Wie können Sie eine Liste der auf Ihrem Computer installierten Python-Module erhalten?


741
2018-04-11 12:34


Ursprung


Antworten:


Lösung

Meine 50 Cent für ein pip freezeähnliche Liste aus einem Python-Skript:

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)

Als (zu lang) ein Liner:

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

Geben:

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

Umfang

Diese Lösung gilt für den Systembereich oder den Gültigkeitsbereich einer virtuellen Umgebung und umfasst Pakete, die von installiert werden setuptools, pip und (Gott bewahre) easy_install.

Mein Anwendungsfall

Ich habe das Ergebnis dieses Anrufs zu meinem Flaschen-Server hinzugefügt, also wenn ich es anrufe http://example.com/exampleServer/environment Ich bekomme die Liste der Pakete, die auf dem Virtualenv des Servers installiert sind. Es erleichtert das Debugging erheblich.

Vorbehalte

Ich habe ein merkwürdiges Verhalten dieser Technik bemerkt - wenn der Python - Interpreter im gleichen Verzeichnis wie a aufgerufen wird setup.py Datei, es listet das Paket, das von installiert wird, nicht auf setup.py.

Schritte zum Reproduzieren:

Erstellen Sie eine virtuelle Umgebung
$ cd /tmp
$ virtualenv test_env
New python executable in test_env/bin/python
Installing setuptools, pip...done.
$ source test_env/bin/activate
(test_env) $ 
Klonen Sie ein Git Repo mit 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.

Wir haben Verhalten setup.py im /tmp/behave:

(test_env) $ ls /tmp/behave/setup.py
/tmp/behave/setup.py
Installieren Sie das Python-Paket aus dem 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

Wenn wir die vorgenannte Lösung aus führen /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'

Wenn wir die vorgenannte Lösung aus führen /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 fehlt im zweiten Beispiel, weil das Arbeitsverzeichnis enthält behaveist es setup.py Datei.

Ich konnte in der Dokumentation keinen Hinweis auf dieses Problem finden. Vielleicht werde ich einen Fehler dafür öffnen.


484
2018-05-27 09:05



help('modules')

in einer Python-Shell / Eingabeaufforderung.


800
2018-04-11 12:45



Nun, diese Methoden habe ich selbst versucht, und ich bekam genau das, was beworben wurde: Alle Module.

Ach, eigentlich interessiert dich die stdlib nicht sonderlich, du weißt, was du mit einer Python-Installation bekommst.

Wirklich, ich will das Zeug, dass ich Eingerichtet.

Was eigentlich überraschend gut funktionierte, war:

pip freeze

Welches zurückgegeben wurde:

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

Ich sage "überraschend", weil das Paketinstallationstool der genaue Ort ist, den man erwarten würde, um diese Funktionalität zu finden, obwohl nicht unter dem Namen "freeze" aber Python-Verpackung ist so komisch, dass ich verblüfft bin, dass dieses Tool Sinn macht. Pip 0.8.2, Python 2.7.


221
2018-01-16 03:42



  • Im ipython du kannst Tippen "importTab".

  • Im Standard-Python-Interpreter können Sie "help('modules')".

  • In der Befehlszeile können Sie verwenden pydoc  modules.

  • Rufen Sie in einem Skript auf pkgutil.iter_modules().


69
2018-02-08 13:24



Seit pip Version 1.3 haben Sie Zugriff auf:

pip list

Das scheint syntaktischer Zucker für "pip freeze" zu sein. Es wird alle für Ihre Installation oder Virtualenv spezifischen Module zusammen mit ihren Versionsnummern auflisten. Leider zeigt es weder die aktuelle Versionsnummer eines Moduls an, noch spült es Ihr Geschirr oder glänzt Ihre Schuhe.


62
2017-07-25 22:56



In normaler Shell einfach verwenden

pydoc modules

51
2017-08-23 09:45



Ich benutze das nur, um die aktuell verwendeten Module zu sehen:

import sys as s
s.modules.keys()

Dies zeigt alle Module an, die auf Ihrem Python laufen.

Für alle eingebauten Module verwenden Sie:

s.modules

Welches ist ein Dict, das alle Module und Importobjekte enthält.


48
2018-06-22 22:02