Wie erhalte ich eine Liste der auf meinem Computer installierten Python-Module?
Antworten
Zu viele Anzeigen?Lösung
Nicht mit pip > 10.0 verwenden!
Meine 50 Cent für den Erhalt eines pip freeze
-ähnlichen 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 langer) Einzeiler:
sorted(["%s==%s" % (i.key, i.version) for i in pip.get_installed_distributions()])
Schenken:
['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 Bereich einer virtuellen Umgebung und deckt Pakete ab, die von setuptools
, pip
und ( Gott bewahre ) easy_install
.
Mein Anwendungsfall
Ich habe das Ergebnis dieses Aufrufs zu meinem Flask-Server hinzugefügt, wenn ich ihn also mit http://example.com/exampleServer/environment
Ich erhalte die Liste der Pakete, die in der Virtualenv des Servers installiert sind. Das macht die Fehlersuche sehr viel einfacher.
Vorbehalte
Mir ist ein seltsames Verhalten dieser Technik aufgefallen - wenn der Python-Interpreter im selben Verzeichnis wie eine setup.py
nicht das Paket auf, das von setup.py
.
Schritte zur Reproduktion:
Erstellen einer virtuellen 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 eines Git-Repositories 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 behave's setup.py
en /tmp/behave
:
(test_env) $ ls /tmp/behave/setup.py
/tmp/behave/setup.py
Installieren Sie das Python-Paket aus dem Git-Repositorium
(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
Wenn wir die oben erwähnte Lösung von /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 oben erwähnte Lösung von /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, denn das Arbeitsverzeichnis enthält behave
's setup.py
archivo.
Ich konnte in der Dokumentation keinen Hinweis auf dieses Problem finden. Vielleicht sollte ich einen Bug dafür öffnen.
Nun, diese Methoden habe ich selbst ausprobiert, und ich habe genau das bekommen, was beworben wurde: Alle Module.
Leider, wirklich Sie nicht viel über die stdlib kümmern, Sie wissen, was Sie mit einer Python-Installation erhalten.
Wirklich, ich will das Zeug, das I installiert.
Was überraschenderweise tatsächlich gut funktionierte, war:
pip freeze
Die zurückkehrte:
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 "überraschenderweise", weil das Paketinstallationstool genau der Ort ist, an dem man diese Funktionalität erwarten würde, wenn auch nicht unter dem Namen "freeze", aber Python-Pakete sind so seltsam, dass ich verblüfft bin, dass dieses Tool Sinn macht. Pip 0.8.2, Python 2.7.
Seit Pip Version 1.3 haben Sie Zugang zu:
pip list
Das scheint ein syntaktischer Zucker für "pip freeze" zu sein. Es listet alle Module auf, die in Ihrer Installation oder Virtualenv vorhanden sind, zusammen mit ihren Versionsnummern. Leider zeigt es weder die aktuelle Versionsnummer eines Moduls an, noch spült es Ihr Geschirr oder putzt Ihre Schuhe.
- See previous answers
- Weitere Antworten anzeigen