Wie Sie feststellen können , ob ein Python-Modul im System installiert ist oder nicht: Sie können einen sehr einfachen Test im Terminal durchführen.
$ python -c "import math"
$ echo $?
0 # math module exists in system
$ python -c "import numpy"
Traceback (most recent call last):
File "<string>", line 1, in <module>
ImportError: No module named numpy
$ echo $?
1 # numpy module does not exist in system
Wie installiere ich es, wenn es nicht installiert ist?
Sie können ein bestimmtes Modul installieren, indem Sie die entsprechenden Pakete aus dem Repository herunterladen. Beispielsweise können Sie installierenscipy
als:
sudo apt-get install python-scipy ## for Python2
sudo apt-get install python3-scipy ## for Python3
Alternativ können Sie auch ein Python-Modul installieren, indem Sie, python-pip
wie von Zack Titan im folgenden Kommentar vorgeschlagen , numpy
verwenden
pip install numpy
Warnung: Es wird dringend empfohlen, Python-Module nur mit dem offiziellen Ubuntu-Repository zu installieren und die pip
Methode nicht als Superuser (dh als root
oder mit sudo
) zu verwenden. In einigen Fällen kann es passieren, dass Ihr System unbrauchbar wird, indem Sie Systempython unterbrechen.
So installieren Sie Pakete mithilfe der pip
lokalen virtuellen Umgebung.
vpython
Sie es beispielsweise alssudo apt-get install python-visual libgtkglextmm-x11-1.2-dev
sudo pip
; es kann Systempython brechen. Verwenden Sie apt-get, um Pakete für Systempython zu installieren. Sie könnenpip --user
option oder virtualenv verwenden, um Python-Pakete für sich selbst zu installieren.Falls wir ein fragliches Modul nicht ungewollt importieren möchten (was in einer
try
Anweisung passieren würde ), können wirsys.modules
Module testen, die installiert sind und zuvor importiert wurden.In der Python-Shell-Ausgabe:
Dann testen Sie nach installierten Modulen:
Beachten Sie, dass nur die zuvor importierten Module
True
diesen Test bestehen, alle anderen Module (auch wenn installiert) führen zuFalse.
Eine andere Alternative zu
try
einerimport
Anweisung in der Python-Konsole ist der Aufruf der eingebautenhelp()
Funktion. Dies wird keine Dokumentation für nicht installierte Module geben, zDie Ausgabe sehr langer Hilfedokumente von installierten Modulen kann mit unterbrochen werden Q.
Um nun fehlende Module zu installieren, wird empfohlen, die Ubuntu-Paketverwaltung (und nicht die Python-Pip-Methode) zu verwenden, da wir Root-Zugriff benötigen und außerdem verhindern, dass unser stark von Python abhängiges System durcheinandergebracht wird. Für das betreffende Modul wäre dies zB:
Nach der Installation können wir sie dem
sys.modules
Wörterbuch hinzufügen, indem wir sie einmal importieren.quelle
sys.modules
nur Module angezeigt, die bereits importiert wurden. Auf diese Weise kann nicht zuverlässig überprüft werden, ob ein Modul installiert wurde. Der zuverlässigste Test ist die Verwendung von atry/except
und trapImportError
, wie mehrere andere bereits vorgeschlagen haben.sys.modules
ist, völlig irrelevant ist und ich denke, dass jede Erwähnung davon irreführend ist. Aber vielleicht bin das nur ich.sys.modules
ist hier keine hilfe.Ein anderer Weg ist das
pkgutil
Modul. Funktioniert mit Python 2 und 3:Sie müssen durch
module
den Namen Ihres Moduls ersetzen , Beispiel:quelle
print()
wird auch gut funktionieren in Python 2; Es wird wie die Group-with-Parens-Syntax behandelt und hat keine Nebenwirkungen. Nur wenn Sie mehrere Elemente hinzufügen möchten (wieprint('a', 'b')
es als ein behandelt wirdtuple
, in dem Sie das benötigenfrom __future__ import print_function
, aber das ist in diesem Fall nicht zutreffend), können Sie einfach vorwärtskompatiblen Code schreiben, indem Sie die Parens hinzufügen (ich habe meine Änderungen getestet) in Python 2 und 3)exit
Sie einfach zu, damit es im Shell-Kontext verwendet werden kann:python -c 'import pkgutil; exit(0 if pkgutil.find_loader("math") else 2)'
Ich weiß, dass das OP ursprünglich nach dem Start von Python nach einer Lösung gefragt hat, aber außerhalb von Python verwende ich
pip
. Auf Ubuntu:sudo apt-get install python-pip
Wenn es nicht bereits installiert ist.Um zu sehen, welche Module von Drittanbietern verfügbar sind, führen Sie einfach Folgendes aus:
Oder auch
Und beide zeigen Ihnen alle installierten Module und ihre Versionen.
Wenn das gesuchte Modul nicht installiert ist, können Sie es die meiste Zeit problemlos mit pip installieren:
Wenn Sie nicht sicher sind, ob ein Modul existiert oder wie sein PyPI-Name lautet, verwenden Sie
pip search
:quelle
pip show <module-name>
wird angezeigt, ob ein Paket installiert ist, zpip show numpy
.Sie könnten den Code einbauen
try
,except
blockieren.quelle
Um eine andere Antwort zu geben, zur Vervollständigung:
Sie können die
-m
Option (ab) verwenden . Aus Pythons Manpage:Welches wird uns geben:
Aber für nicht existierende Module gibt es uns:
Wir könnten
grep
dazu passen:Das ist etwas hackig und nicht das, wofür
-m
es gedacht war. aber es ist die Methode, die am wenigsten Eingabe erfordert, wenn Sie einen schnellen Test wünschen :-)quelle
grep -q
macht die Umleitung auf null unnötig./dev/null
Laufe der Jahre viele nutzlose Weiterleitungen an getippt : - /Ich habe ein Beispiel in Python geschrieben:
quelle
Shell-Oneliner-Check (nützlich für die Bereitstellung)
Ich habe festgestellt, dass ich in der Lage sein muss, in einem Oneliner nach einem Paket aus der Shell zu suchen, um meine Infrastrukturbereitstellung ** idempotent zu machen. Ich habe auf @ cuonglms Antwort aufgebaut. Ich musste das
1
und umkehren,0
weil ich einen Exit-Status erzeuge, anstatt einen String zu drucken.Sie könnten den Namen
sys.argv[1]
durch den Namen Ihres Pakets in einfachen Anführungszeichen ersetzen , aber für meine Bereitstellungsskripte mag ich die Lesbarkeit, wenn ich ihn am Ende habe.** Ich weiß , dass Chef , Puppet und Ansible Plugins für die Verwaltung von Python-Paketen haben, aber Sie befinden sich möglicherweise in einer Situation wie mir, in der Sie eine veraltete Version verwenden und keine veralteten Plugins verwenden möchten.
quelle
Man kann auch verwenden
pydoc modules
, mit dem gefiltert werden kanngrep
, um ein bestimmtes Modul zu finden. Die Ausgabe wird in Spaltenform angezeigt. Der einzige Nachteil dieses Ansatzes ist, dass er auch Python-Dateien im aktuellen Arbeitsverzeichnis enthält. Trotzdem benutze ich es die meiste Zeit selbst und es ist einer der häufig zitierten Ansätze zu dieser verwandten Frage: https://stackoverflow.com/q/739993/3701431quelle
Aus der Ubuntu-Shell, standardmäßig bash, so einfach wie
Beispiele
Und wenn Sie Zweifel an der Schreibweise haben (obwohl ich denke, dass alle Paketnamen immer in Kleinbuchstaben geschrieben sind):
quelle
Dies
pip show ...
scheint der einfachste Weg zu sein: https://pip.pypa.io/en/stable/reference/pip_show/Aber es ist still (dh es gibt nichts zurück), wenn das Paket nicht installiert ist.
quelle