Sie können einfach >>> help () und dann >>> Module
ausführen
1
Gibt es eine Alternative? help () hängt für mich.
Paulo Carvalho
2
Bei vielen dieser Antworten wird davon ausgegangen, dass Sie Zugriff auf eine Befehlszeile haben. Wenn Sie AWS Lambda verwenden, müssen Sie alles in Python ausführen. Siehe stackoverflow.com/a/54939905/117471
Bruno Bronosky
Antworten:
610
Lösung
Nicht mit pip> 10.0 verwenden!
Meine 50 Cent für das Abrufen einer 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()])
Diese Lösung gilt für das System Umfang oder in einen virtuellen Umgebung Umfang und Abdeckungen Pakete installiert durch setuptools, pipund ( Gott bewahre ) easy_install.
Mein Anwendungsfall
Ich habe das Ergebnis dieses Aufrufs zu meinem http://example.com/exampleServer/environmentFlask-Server hinzugefügt. Wenn ich ihn mit aufrufe, wird die Liste der auf der virtuellen Umgebung des Servers installierten Pakete angezeigt. Dies erleichtert das Debuggen erheblich.
Vorsichtsmaßnahmen
Ich habe ein seltsames Verhalten dieser Technik festgestellt. Wenn der Python-Interpreter im selben Verzeichnis wie eine setup.pyDatei aufgerufen wird , wird das von installierte Paket nicht aufgelistet 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) $
(test_env) $ ls /tmp/behave/setup.py
/tmp/behave/setup.py
Installieren Sie das Python-Paket vom Git-Repo
(test_env) $ cd /tmp/behave && pip install .
running install
...Installed/private/tmp/test_env/lib/python2.7/site-packages/enum34-1.0-py2.7.eggFinished processing dependencies for behave==1.2.5a1
Wenn wir die oben genannte Lösung von ausfü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 oben genannte Lösung von ausfü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.5a1aus dem zweiten Beispiel fehlt, weil das Arbeitsverzeichnis enthält behave‚s - setup.pyDatei.
Ich konnte in der Dokumentation keinen Hinweis auf dieses Problem finden. Vielleicht werde ich einen Fehler dafür öffnen.
Vielen Dank für diese Antwort! Ich denke, es beantwortet die Frage besser, weil ich "lokal" installierte Python-Module frage. Pip Freeze ist auch nicht immer der richtige Weg. Das funktioniert besser - denke ich.
Léo Léopold Hertz 27
3
@Masi Habe gerade eine detaillierte Erklärung der Einschränkung dieser Lösung hinzugefügt. Es ist in der Tat eine seltsame.
Adam Matan
21
Eine Alternative:import pkg_resources; installed_packages = [(d.project_name, d.version) for d in pkg_resources.working_set]
Ebolyen
14
Ab Pip 10 funktioniert diese Antwort nicht mehr. Der Kommentar von @ebolyen zeigt alternative Befehle, die funktionieren. Ich bin zu dem gleichen Schluss gekommen und habe den vollständigen überarbeiteten Code unten veröffentlicht.
Big_Al_Tx
5
In neueren Versionen von pip funktioniert dies nicht und es wird eine Fehlermeldung angezeigt AttributeError: module 'pip' has no attribute 'get_installed_distributions'.
Ich sage "überraschend", weil das Paketinstallations-Tool genau der Ort ist, an dem man diese Funktionalität erwarten würde, obwohl nicht unter dem Namen "Einfrieren", aber die Python-Verpackung ist so seltsam, dass ich verblüfft bin, dass dieses Tool Sinn macht. Pip 0.8.2, Python 2.7.
Ich denke, die Idee hinter dem Namen ist, dass Sie einen "eingefrorenen" Schnappschuss von dem bekommen, was gerade installiert ist, den Sie später in pip zurückspeisen können, um genau die gleichen Module in einer anderen Umgebung zu installieren.
Ryan C. Thompson
Arash, du kannst pip auch unter Windows installieren! Installieren Sie zuerst setuptools und verwenden Sie dann easy_install, um pip zu installieren :)
gawbul
Das ist ausgezeichnet, aber es scheint einige der Bibliotheken zu vermissen, die ich installiert habe. Zum Beispiel wird PyQt nicht aufgelistet.
Es klappt. Was für ein Chaos Python ist. Warum können sie sich nicht zusammenreißen und Lösungen finden, die denen von Rails ähneln? (Gemfile, Bündler, rvm)
Dimitris
106
Seit Pip Version 1.3 haben Sie Zugriff auf:
pip list
Das scheint syntaktischer Zucker für "Pip Freeze" zu sein. Es werden alle Module aufgelistet, die für Ihre Installation oder virtuelle Umgebung spezifisch sind, zusammen mit ihren Versionsnummern. Leider zeigt es weder die aktuelle Versionsnummer eines Moduls an, noch spült es Ihr Geschirr oder glänzt Ihre Schuhe.
pkgutil.iter_modules()funktioniert, die obige Pip-Lösung listet nicht alle Pakete auf, sondern nur die, die über pip installiert wurden.
Metaperture
2
Genial! Ich denke, sie haben die Dokumentation verbessert, seit die Frage gestellt wurde. pydoc modules spam sucht nach Spam in Dokumenten von Modulen. Der letzte Punkt scheint Ihnen die ausreichenden Informationen zu geben, um das Modul zu verwenden. @metaperture Können Sie bitte ein Beispiel geben, wie Sie alle installierten lokalen Module (nicht die massive Liste von stlib by help ('modules')) von pkgutil.iter_modules () auflisten .
Léo Léopold Hertz 29
2
@ LéoLéopoldHertz 준영 Probieren Sie dieses Snippet aus : python -c 'import pkgutil;print [x[1] for x in list(pkgutil.iter_modules())]'. Es sollte alle Modulnamen als eine wirklich große Python-Liste ausgeben. Das x[1]Bit wird verwendet, um den Modulnamen aus den von generierten Tupeln zu ziehen pkgutil.iter_modules().
Philip Conrad
76
Ich benutze dies nur, um aktuell verwendete Module zu sehen:
import sys as s
s.modules.keys()
Hier werden alle Module angezeigt, die auf Ihrem Python ausgeführt werden.
Verwenden Sie für alle eingebauten Module:
s.modules
Welches ist ein Diktat, das alle Module und Importobjekte enthält.
# Nachdem Sie sys "import sys as s" importiert haben, können Sie drucken mit: print sys.modules.keys ()
Dan Evans
Ich bin mir nicht sicher, warum mein Beitrag bearbeitet wurde, aber ich danke Ihnen, dass Sie die von mir veröffentlichten Informationen verwendet haben, um die Fehler in früheren Beiträgen zu korrigieren. Sie werden Fehler zurückgeben, wenn Sie help () vs help ('') verwenden. Dies gilt auch für dir ('') & sys ('') usw. Hoffe das hilft & wird nicht entfernt.
Dan Evans
Ignoriere meinen letzten Beitrag, dieser Beitrag wurde nicht bearbeitet. Ich dachte an einen ähnlichen Beitrag, der hier zu finden ist: stackoverflow.com/questions/139180/… Entschuldigung für die Verwirrung.
Dan Evans
7
Upvoted, da dies die einzige Methode ist, die auf eingeschränkten Systemen zu funktionieren scheint, die weder installiert pydocnoch pipinstalliert sind (in meinem Fall ein NAS).
Thomas
1
Einverstanden mit Thomas. Ich verwende zum Beispiel repl.it, eine eingeschränkte Umgebung. help('modules')hängt einfach ohne Antwort für mich. Aber dieser Ansatz sysfunktioniert perfekt
Es scheint, dass das oben genannte nur auf 'nix-Plattformen funktioniert. Auf jeden Fall habe ich das Skript gefunden und ausgeführt und den Befehl wie folgt angepasst: c: \ bin \ pythos_2.7 \ lib \ pydoc.py-Module - die Erstellung dieser Liste hat ewig gedauert, das Format ist zum Kotzen und die installierte Version wird weggelassen Nummer. Ich werde vorbeigehen.
David A. Gray
2
@ DavidA.Gray Ich habe es gerade auf einem Windows-Computer mit Python 3 versucht, und es funktioniert tatsächlich. Mit dem Python Windows Launcher können Sie py -m pydoc modulesin cmd oder Powershell arbeiten.
VKK
pydoc modulesfunktionierte bei mir in Windows 10 mit Python 3.6 nicht, aber @ VKK-Modifikation: py -m pydoc modulesfunktioniert in cmd / Powershell.
Martin
41
Ab Pip 10 funktioniert die akzeptierte Antwort nicht mehr. Das Entwicklungsteam hat den Zugriff auf die get_installed_distributionsRoutine entfernt. Es gibt eine alternative Funktion, setuptoolsum dasselbe zu tun. Hier ist eine alternative Version, die mit Pip 10 funktioniert:
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)
Bitte lassen Sie mich wissen, ob es auch in früheren Versionen von pip funktioniert oder nicht.
Ich habe nach dieser Lösung gesucht und mir den Kopf zerbrochen, um pkg_resources herauszufinden. Wenn ich dies mehr als einmal positiv bewerten könnte, würde ich es tun. Vielen Dank, @Big_Al_Tx! Update: Außer ... wenn ich in meiner virtuellen Umgebung ein "Pip Freeze" durchführe und es mit der Ausgabe vergleiche, fehlen Pakete. Irgendwelche Gedanken darüber, warum das passieren könnte / würde?
Nummer
@numberwhun - Ich bin froh, dass dies für Sie funktioniert hat. Es tut mir leid, aber ich habe keine Antwort auf die Diskrepanz mit pip freeze; Die Tiefe meines Wissens zu diesem Thema ist eher begrenzt. Ich habe mich irgendwie auf den Weg zur Lösung gemacht, als die akzeptierte Antwort für mich nicht funktionierte und ich versuchte, sie mit einer Antwort zu kombinieren setuptoolsund sie zum Laufen zu bringen.
Big_Al_Tx
github.com/pypa/pip/issues/5243 - Das Gespräch des Entwicklungsteams über den entfernten Zugriff auf die get_installed_distributions routine.
Bl79
@ bl79 - Ich denke, das ist genau der Ort, für den ich die Referenz bekommen habe setuptools.
Big_Al_Tx
@Big_Al_Tx: Nun, ich habe die Setuptools-Option (die für meine Bedürfnisse zu verschleiern war) irgendwie umgangen und bin dazu übergegangen: installierte_pkgs = subprocess.check_output (['pip', 'freeze']) Sie macht genau das, was ich tue brauchte es zu tun .... Yay !!
Nummer
26
Wenn wir die installierten Pakete in der Python-Shell auflisten müssen, können wir den helpBefehl wie folgt verwenden
Ich benutze normalerweise pip list , um eine Liste von Paketen (mit Version) zu erhalten.
Dies funktioniert natürlich auch in einer virtuellen Umgebung. Verwenden Sie, um anzuzeigen, was nur in der virtuellen Umgebung (nicht in globalen Paketen) installiert ist pip list --local.
Dies funktionierte bei mir mit: python3 -m pip freeze - für python 3.5.3.
dpminusa
Dies funktioniert gut und Sie müssen nicht im libs-Verzeichnis sein, wenn Ihre Variablen definiert sind
mcy
12
Ich bin auf ein benutzerdefiniertes Python 2.7 unter OS X gestoßen. X11 musste die installierten Module auflisten (sowohl mit Hilfe als auch mit Pydoc).
Um alle Module auflisten zu können, ohne X11 zu installieren, habe ich pydoc als http-Server ausgeführt, dh:
pydoc -p 12345
Dann ist es möglich, Safari anzuweisen, http://localhost:12345/alle Module anzuzeigen.
import sys
import os
import shutil
import pkgutil
import importlib
import collections
if sys.version_info.major ==2:raiseNotImplementedError('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 modulesfor 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 yetif module.loader notin 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 modulesfor module_name in pkgutil.iter_modules():# ignore this moduleif 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 notin 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()
Um zu verstehen, wie Ihr Ansatz besser / schlechter ist als Adams Ansatz.
Léo Léopold Hertz 8
1
@ Léo Léopold Hertz. Eine kurze Antwort: Probieren Sie es selbst in einer Produktion aus und ziehen Sie selbst Schlussfolgerungen. Lange Antwort: Der Ansatz von Adam basiert auf dem pipPaketverwaltungssystem, mit dem in Python geschriebene Softwarepakete installiert und verwaltet werden. Das Ergebnis pip.get_installed_distributions()gibt Module zurück, die mit dem Pip installiert wurden. Meine Antwort basiert vollständig auf der Standardbibliothek von Python und deckt alle für den Import verfügbaren Module ab. Ein größter Nachteil meiner Antwort - keine Unterstützung für die CPython 2.
PADYMKO
1
@ Léo Léopold Hertz Sie irren sich, es tut es. Ich habe es auf meinem Computer getestet. Meine Antwort enthält eine besondere Bedeutung **truncated**, bei der eine Ausgabe abgeschnitten wird. Vielleicht sind Sie nicht vorsichtig, aber wenn dies nicht der Fall ist. Um mir Informationen über Ihr System und die Python-Implementierung zu senden, werde ich zusätzliche Nachforschungen anstellen, um das Problem zu beheben.
PADYMKO
9
Warnung: Adam Matan rät von dieser Verwendung in pip> 10.0 ab. Lesen Sie auch den Kommentar von @ sinoroc unten
Dies wurde von Adam Matans Antwort (der akzeptierten) inspiriert :
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))
So können Sie leicht erkennen, welche Pakete Sie mit und ohne installiert haben sudo.
Abgesehen von einem Hinweis: Ich habe festgestellt, dass bei der einmaligen Installation eines Pakets über sudound einmal ohne Vorrang ein Paket Vorrang hat, sodass das andere Paket nicht aufgeführt wird (nur ein Speicherort wird angezeigt). Ich glaube, dass dann nur der im lokalen Verzeichnis aufgeführt ist. Dies könnte verbessert werden.
@sinoroc Vielen Dank für den Hinweis. Die Punkte 1 bis 3 scheinen für diese Lösung nicht anwendbar zu sein, da dieses Skript den einzigen Zweck hat, es pipeinmal zu verwenden und dann zu beenden. Es scheint eher ein Problem zu sein, dass sich das Verhalten ändern könnte.
Daniel F
Einverstanden, die Gründe, warum es keine öffentliche API gibt, gelten nicht für diesen bestimmten Code. Da pip jedoch nicht verpflichtet ist, eine öffentliche API zu garantieren, kann es seine internen APIs, Codestrukturen usw. in einer späteren Version ändern, wie dies bereits zuvor der Fall war. Aus diesem Grund hat dieser Code einen Versuch / eine Ausnahme, um die vorherige interne Code-Reorganisation abzufangen, mit der klargestellt werden sollte, dass interne APIs interne und keine öffentlichen APIs sind ( _internal). Alles in allem funktioniert es offensichtlich, ist aber eine schlechte Praxis. Es gibt bessere Alternativen, einige finden sich in den anderen Antworten auf diese Frage.
Sinoroc
1
Dieses Skript funktioniert nicht, wenn das Modul "pip" nicht vorhanden ist.
Alexander Stohr
8
Abgesehen von der Verwendung habe pip freezeich Eigelb in meinen virtuellen Umgebungen installiert .
Wenn Sie sich auf Ihrem UNIX / Mac OS X-Computer befinden, öffnen Sie Ihr Terminal und geben Sie einfach ein conda install, es sollte funktionieren :)
Shreyas
Ich bin auf einem Windows 7-Computer. Ich habe es tatsächlich in meinem Pfad gefunden, aber conda.exe befindet sich in AppData \ Local \ Continuum \ Anaconda \ Scripts.
HuckIt
6
Um alle verfügbaren Module zu erhalten, führen Sie aus sys.modules
Um alle installierten Module (lesen: installiert von pip) zu erhalten, können Sie sich ansehenpip.get_installed_distributions()
Für den zweiten Zweck Beispielcode:
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
pip freeze macht alles, um Pakete zu finden, aber man kann einfach den folgenden Befehl schreiben, um alle Pfade aufzulisten, in denen sich Python-Pakete befinden.
Im Quellverzeichnis der Dokumentation in 2.5 ist ein kleines Skript versteckt, das alle verfügbaren Module für eine Python-Installation auflistet.
Vorteile:
verwendet nur imp, sys, os, re, time
Entwickelt für Python 1.5.2 und höher
Der Quellcode ist sehr kompakt, so dass Sie leicht daran basteln können, um beispielsweise eine Ausnahmeliste mit fehlerhaften Modulen zu übergeben (versuchen Sie nicht, sie zu importieren).
Ich musste die spezifische Version der Pakete finden, die standardmäßig in AWS Lambda verfügbar sind. Ich habe dies mit einem Mashup von Ideen von dieser Seite getan. Ich teile es für die Nachwelt.
import pkgutil
__version__ ='0.1.1'def get_ver(name):try:return str(__import__(name).__version__)except:returnNonedef 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],}
Was ich entdeckte, war, dass die bereitgestellte boto3-Bibliothek veraltet war und es nicht meine Schuld war, dass mein Code fehlschlug. Ich musste meinem Projekt nur boto3 und botocore hinzufügen. Aber ohne das hätte ich mir den Kopf geschlagen, weil ich dachte, mein Code sei schlecht.
Hier ist eine Python-Codelösung, die eine Liste der installierten Module zurückgibt. Man kann den Code leicht ändern, um Versionsnummern einzuschließen.
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)
Dies zeigt auch keine eingebauten Module oder Module in einem benutzerdefinierten PYTHONPATH oder solche, die im "Entwicklungsmodus" von setuptools usw. installiert sind
dF.
Mein /usr/local/lib/python2.5/site-packages ist leer, obwohl ich Module installiert habe.
Léo Léopold Hertz 준영
14
Ein großes Lob dafür, dass Sie diese herabgestimmte Antwort nicht gelöscht haben. Für die Community ist es hilfreich zu sehen, warum eine häufige Antwort als falsch angesehen wird.
Jeremy Stein
1
@JeremyStein Eine bessere Strategie (hilfreicher und wahrscheinlich weniger rep-schädlich) wäre wahrscheinlich, die Frage zu bearbeiten, um zu erklären, warum es falsch ist, sobald dies in den Kommentaren erklärt wurde ...
Antworten:
Lösung
Nicht mit pip> 10.0 verwenden!
Meine 50 Cent für das Abrufen einer
pip freeze
ähnlichen Liste aus einem Python-Skript:Als (zu langer) Einzeiler:
Geben:
Umfang
Diese Lösung gilt für das System Umfang oder in einen virtuellen Umgebung Umfang und Abdeckungen Pakete installiert durch
setuptools
,pip
und ( Gott bewahre )easy_install
.Mein Anwendungsfall
Ich habe das Ergebnis dieses Aufrufs zu meinem
http://example.com/exampleServer/environment
Flask-Server hinzugefügt. Wenn ich ihn mit aufrufe, wird die Liste der auf der virtuellen Umgebung des Servers installierten Pakete angezeigt. Dies erleichtert das Debuggen erheblich.Vorsichtsmaßnahmen
Ich habe ein seltsames Verhalten dieser Technik festgestellt. Wenn der Python-Interpreter im selben Verzeichnis wie eine
setup.py
Datei aufgerufen wird , wird das von installierte Paket nicht aufgelistetsetup.py
.Schritte zum Reproduzieren:
Erstellen Sie eine virtuelle Umgebung Klonen Sie ein Git-Repo mitsetup.py
Wir haben uns verhalten
Installieren Sie das Python-Paket vom Git-Reposetup.py
in/tmp/behave
:Wenn wir die oben genannte Lösung von ausführen
/tmp
Wenn wir die oben genannte Lösung von ausführen
/tmp/behave
behave==1.2.5a1
aus dem zweiten Beispiel fehlt, weil das Arbeitsverzeichnis enthältbehave
‚s -setup.py
Datei.Ich konnte in der Dokumentation keinen Hinweis auf dieses Problem finden. Vielleicht werde ich einen Fehler dafür öffnen.
quelle
import pkg_resources; installed_packages = [(d.project_name, d.version) for d in pkg_resources.working_set]
AttributeError: module 'pip' has no attribute 'get_installed_distributions'
.in einer Python-Shell / Eingabeaufforderung.
quelle
pydoc modules
funktioniert. Sie sollten es als Antwort einreichen.python -c 'help("modules")'
Nun, diese Methoden habe ich selbst ausprobiert und genau das bekommen, was beworben wurde: Alle Module.
Leider interessiert Sie die stdlib nicht besonders, Sie wissen, was Sie mit einer Python-Installation erhalten.
Wirklich, ich möchte das Zeug, das ich installiert habe.
Was eigentlich überraschenderweise gut funktionierte, war:
Was zurückkam:
Ich sage "überraschend", weil das Paketinstallations-Tool genau der Ort ist, an dem man diese Funktionalität erwarten würde, obwohl nicht unter dem Namen "Einfrieren", aber die Python-Verpackung ist so seltsam, dass ich verblüfft bin, dass dieses Tool Sinn macht. Pip 0.8.2, Python 2.7.
quelle
Seit Pip Version 1.3 haben Sie Zugriff auf:
Das scheint syntaktischer Zucker für "Pip Freeze" zu sein. Es werden alle Module aufgelistet, die für Ihre Installation oder virtuelle Umgebung spezifisch sind, zusammen mit ihren Versionsnummern. Leider zeigt es weder die aktuelle Versionsnummer eines Moduls an, noch spült es Ihr Geschirr oder glänzt Ihre Schuhe.
quelle
pip list --local
zur Unterscheidung zwischenvirtualenv
und globalen Site-Paketen, die hier diskutiert werden .pip list
ist das einfachste und das beste. Hier sind die Optionen und Details.In können
ipython
Sie "import
Tab" eingeben.Im Standard-Python-Interpreter können Sie "
help('modules')
" eingeben.In der Befehlszeile können Sie verwenden .
pydoc
modules
Rufen Sie in einem Skript auf
pkgutil.iter_modules()
.quelle
pkgutil.iter_modules()
funktioniert, die obige Pip-Lösung listet nicht alle Pakete auf, sondern nur die, die über pip installiert wurden.python -c 'import pkgutil;print [x[1] for x in list(pkgutil.iter_modules())]'
. Es sollte alle Modulnamen als eine wirklich große Python-Liste ausgeben. Dasx[1]
Bit wird verwendet, um den Modulnamen aus den von generierten Tupeln zu ziehenpkgutil.iter_modules()
.Ich benutze dies nur, um aktuell verwendete Module zu sehen:
Hier werden alle Module angezeigt, die auf Ihrem Python ausgeführt werden.
Verwenden Sie für alle eingebauten Module:
Welches ist ein Diktat, das alle Module und Importobjekte enthält.
quelle
pydoc
nochpip
installiert sind (in meinem Fall ein NAS).help('modules')
hängt einfach ohne Antwort für mich. Aber dieser Ansatzsys
funktioniert perfektIn normaler Schale einfach verwenden
quelle
py -m pydoc modules
in cmd oder Powershell arbeiten.pydoc modules
funktionierte bei mir in Windows 10 mit Python 3.6 nicht, aber @ VKK-Modifikation:py -m pydoc modules
funktioniert in cmd / Powershell.Ab Pip 10 funktioniert die akzeptierte Antwort nicht mehr. Das Entwicklungsteam hat den Zugriff auf die
get_installed_distributions
Routine entfernt. Es gibt eine alternative Funktion,setuptools
um dasselbe zu tun. Hier ist eine alternative Version, die mit Pip 10 funktioniert:Bitte lassen Sie mich wissen, ob es auch in früheren Versionen von pip funktioniert oder nicht.
quelle
pip freeze
; Die Tiefe meines Wissens zu diesem Thema ist eher begrenzt. Ich habe mich irgendwie auf den Weg zur Lösung gemacht, als die akzeptierte Antwort für mich nicht funktionierte und ich versuchte, sie mit einer Antwort zu kombinierensetuptools
und sie zum Laufen zu bringen.get_installed_distributions routine
.setuptools
.Wenn wir die installierten Pakete in der Python-Shell auflisten müssen, können wir den
help
Befehl wie folgt verwendenquelle
Ich benutze normalerweise
pip list
, um eine Liste von Paketen (mit Version) zu erhalten.Dies funktioniert natürlich auch in einer virtuellen Umgebung. Verwenden Sie, um anzuzeigen, was nur in der virtuellen Umgebung (nicht in globalen Paketen) installiert ist
pip list --local
.Hier finden Sie eine Dokumentation mit allen verfügbaren
pip list
Optionen sowie einige gute Beispiele.quelle
Sehr einfache Suche mit pkgutil.iter_modules
quelle
for m in iter_modules()
und es hat auch funktioniert.Geben Sie dies unter Windows in cmd ein
quelle
Ich bin auf ein benutzerdefiniertes Python 2.7 unter OS X gestoßen. X11 musste die installierten Module auflisten (sowohl mit Hilfe als auch mit Pydoc).
Um alle Module auflisten zu können, ohne X11 zu installieren, habe ich pydoc als http-Server ausgeführt, dh:
Dann ist es möglich, Safari anzuweisen,
http://localhost:12345/
alle Module anzuzeigen.quelle
Probiere diese
oder
quelle
Das wird helfen
Geben Sie in Terminal oder IPython Folgendes ein:
dann
quelle
Diese Lösung basiert hauptsächlich auf Modulen
importlib
undpkgutil
funktioniert mit CPython 3.4 und CPython 3.5, unterstützt jedoch CPython 2 nicht.Erläuterung
sys.builtin_module_names
- benennt alle eingebauten Module (siehe meine Antwort hier )pkgutil.iter_modules()
- gibt Informationen zu allen verfügbaren Modulen zurückimportlib.util.find_spec()
- gibt Informationen zum Importieren des Moduls zurück, falls vorhandenBuiltinImporter
- ein Importeur für eingebaute Module ( docs )SourceFileLoader
- ein Importer für ein Standard-Python-Modul (standardmäßig mit der Erweiterung * .py) ( docs )ExtensionFileLoader
- ein Importer für Module als gemeinsam genutzte Bibliothek (geschrieben auf C oder C ++)Vollständiger Code
Verwendungszweck
Für den CPython3.5 (abgeschnitten)
Für den CPython3.4 (abgeschnitten)
quelle
pip
Paketverwaltungssystem, mit dem in Python geschriebene Softwarepakete installiert und verwaltet werden. Das Ergebnispip.get_installed_distributions()
gibt Module zurück, die mit dem Pip installiert wurden. Meine Antwort basiert vollständig auf der Standardbibliothek von Python und deckt alle für den Import verfügbaren Module ab. Ein größter Nachteil meiner Antwort - keine Unterstützung für die CPython 2.**truncated**
, bei der eine Ausgabe abgeschnitten wird. Vielleicht sind Sie nicht vorsichtig, aber wenn dies nicht der Fall ist. Um mir Informationen über Ihr System und die Python-Implementierung zu senden, werde ich zusätzliche Nachforschungen anstellen, um das Problem zu beheben.Warnung: Adam Matan rät von dieser Verwendung in pip> 10.0 ab. Lesen Sie auch den Kommentar von @ sinoroc unten
Dies wurde von Adam Matans Antwort (der akzeptierten) inspiriert :
die dann eine Tabelle in Form von druckt
So können Sie leicht erkennen, welche Pakete Sie mit und ohne installiert haben
sudo
.Abgesehen von einem Hinweis: Ich habe festgestellt, dass bei der einmaligen Installation eines Pakets über
sudo
und einmal ohne Vorrang ein Paket Vorrang hat, sodass das andere Paket nicht aufgeführt wird (nur ein Speicherort wird angezeigt). Ich glaube, dass dann nur der im lokalen Verzeichnis aufgeführt ist. Dies könnte verbessert werden.quelle
pip
einmal zu verwenden und dann zu beenden. Es scheint eher ein Problem zu sein, dass sich das Verhalten ändern könnte._internal
). Alles in allem funktioniert es offensichtlich, ist aber eine schlechte Praxis. Es gibt bessere Alternativen, einige finden sich in den anderen Antworten auf diese Frage.Abgesehen von der Verwendung habe
pip freeze
ich Eigelb in meinen virtuellen Umgebungen installiert .quelle
Falls Sie eine Anaconda-Python-Distribution installiert haben, können Sie diese auch verwenden
zusätzlich zu den oben beschriebenen Lösungen.
quelle
conda install
, es sollte funktionieren :)sys.modules
pip
) zu erhalten, können Sie sich ansehenpip.get_installed_distributions()
Für den zweiten Zweck Beispielcode:
quelle
/usr/bin/python
oder die von python.org ? Für den ersteren kann ichsys.modules
problemlos verwenden.system.modules
anstelle vonsys.modules
.Für neuere Versionen wie Pip 20
Führen Sie Folgendes in Ihrem Python-Editor oder IPython aus
Lesen Sie andere Antworten und haben Sie diese Kombination zusammengestellt, die in Python am schnellsten und einfachsten ist
quelle
pip freeze macht alles, um Pakete zu finden, aber man kann einfach den folgenden Befehl schreiben, um alle Pfade aufzulisten, in denen sich Python-Pakete befinden.
quelle
Es gibt viele Möglichkeiten, eine Katze zu häuten.
Am einfachsten ist es, die
pydoc
Funktion direkt aus der Shell heraus zu verwenden mit:pydoc modules
Verwenden Sie für weitere Informationen das Tool namens pip-date , das auch die Installationsdaten angibt.
pip install pip-date
quelle
Es gibt viele Ideen, anfangs denke ich über diese beiden nach:
Pip
Hilfe ('Module')
Ich brauche einen einfachen Ansatz, der grundlegende Bibliotheken verwendet und mit dem alten Python 2.x kompatibel ist
Und ich sehe das Licht: listmodules.py
Im Quellverzeichnis der Dokumentation in 2.5 ist ein kleines Skript versteckt, das alle verfügbaren Module für eine Python-Installation auflistet.
Vorteile:
quelle
Ich musste die spezifische Version der Pakete finden, die standardmäßig in AWS Lambda verfügbar sind. Ich habe dies mit einem Mashup von Ideen von dieser Seite getan. Ich teile es für die Nachwelt.
Was ich entdeckte, war, dass die bereitgestellte boto3-Bibliothek veraltet war und es nicht meine Schuld war, dass mein Code fehlschlug. Ich musste meinem Projekt nur boto3 und botocore hinzufügen. Aber ohne das hätte ich mir den Kopf geschlagen, weil ich dachte, mein Code sei schlecht.
Was ich entdeckte, war auch anders als das, was sie offiziell veröffentlichen . Zum Zeitpunkt des Schreibens dieses:
quelle
Installation
Code
Beispielausgabe:
quelle
Hier ist eine Python-Codelösung, die eine Liste der installierten Module zurückgibt. Man kann den Code leicht ändern, um Versionsnummern einzuschließen.
quelle
Für alle, die sich fragen, wie sie
pip list
von einem Python-Programm aus aufrufen sollen , können Sie Folgendes verwenden:quelle
Aus der Schale
Wenn das nicht hilfreich ist, können Sie dies tun.
Und sehen, was das bringt.
quelle