Antworten:
Geben Sie die Shell ein : pydoc modules
.
Dadurch werden Module aufgelistet und Sie können das gewünschte Modul abrufen.
Gefunden auf Stackoverflow hier
Sie sollten pip
den list
Befehl 's mit grep verwenden, der nur installierte Pakete auflistet (nicht alle Module und auch deren Nachbarn):
pip list | grep -F package_name
Wenn package_name mit mehreren installierten Paketen übereinstimmt, z. B. nach dem boto
Zeitpunkt suchen, an dem botocore
auch installiert ist, kann die Verwendung von -w
anstelle von -F
helfen, wie @TaraPrasadGurung vorschlägt. Dies listet nicht das genaue Paket auf, da -w
Zeichen, die in Paketnamen häufig vorkommen, als Wortgrenzen angezeigt werden. Wenn Sie also oder und ruamel.yaml.cmd` installiert haben requests
und genau eine Ausgabezeile benötigen, müssen Sie Folgendes tun:requests-cache
ruamel.yaml
pip list --disable-pip-version-check | grep -E "^ruamel\.yaml "
Bitte beachten Sie, dass Sie, da es .
bei der Verwendung mit einem beliebigen Zeichen -E
übereinstimmt, dieses maskieren müssen.¹
¹ Und ja, das ist notwendig, da es ein Paket gibt ruamel_yaml
. Nicht jeder Paketmanager ist pip
kompatibel, wenn es um Namespace-Pakete geht.
-w
als Wortgrenzen verwendet und sind in Paketnamen üblich. Ich bekomme mehrere Übereinstimmungen, wenn ich Ihren Vorschlag mit grep -w ruamel.yaml
odergrep -w request
pip list | grep -F mxnet-cu101
druckt mxnet-cu101 1.5.0
, aber nicht genau dort, wo es installiert ist. Irgendeine Idee, wie man den installierten Pfad erhält? `
Ich habe vorhandene Antworten unvollständig gefunden und es fehlen ausreichend gute Beispiele. Hier ist die Lösung, für die ich mich entschieden habe:
# an example checking if the pandas package is installed
if python -c 'import pkgutil; exit(not pkgutil.find_loader("pandas"))'; then
echo 'pandas found'
else
echo 'pandas not found'
fi
Eine Github-Zusammenfassung dieses Beispiels finden Sie hier: https://gist.github.com/shaypal5/d505af9953cd86f59c750fa600ee4ba6
Sie können so etwas auch in Ihren Skripten verwenden.
python -c "import sys, pkgutil; sys.exit(0 if pkgutil.find_loader('$Package') else 1)"
Was Sie erhalten würden, wenn ein Paket nicht installiert wäre.
Package=psutil
python3 -c "import sys, pkgutil; sys.exit(0 if pkgutil.find_loader('$Package') else 1)"
echo $?
1
Was Sie erhalten würden, wenn ein Paket installiert wird.
Package=requests
python3 -c "import sys, pkgutil; sys.exit(0 if pkgutil.find_loader('$Package') else 1)"
echo $?
0
Funktioniert in Python2 und Python3, und dann installieren Sie basierend auf dem Exit-Code.
Ich habe eine etwas strengere Version von Anthons Antwort zur Verwendung in einem Skript verwendet:
pip3 list |
grep -v "^Package *Version$" | grep -v "^-*$" |
cut -d ' ' -f 1 |
grep -xF "$package_name"
Die ersten beiden Greps sollen die Header-Zeilen von der Ausgabe von pip3 entfernen.
Der Schnitt wählt dann nur die Paketnamen aus (Verwerfen der Versionsnummern).
Dann kann der endgültige Grep eine genaue Suche nach dem relevanten durchführen $package_name
Wenn das Paket gefunden wird, wird der Paketname angezeigt und mit dem Exit-Code 0 zurückgegeben. Wenn Sie den Paketnamen nicht sehen möchten, beenden Sie den Befehl mit >/dev/null
in einer Python-Shell / Eingabeaufforderung. ::
>>> help('modules')
pip install
. Wenn es bereits installiert ist, wird es nicht erneut installiert.