Réponses:
Tapez le shell: pydoc modules.
Cela listera les modules et vous pouvez grep le module que vous voulez.
Trouvé sur stackoverflow ici
Vous devez utiliser pipla listcommande de avec grep, qui répertorie uniquement les packages installés (pas tous les modules et leurs voisins également):
pip list | grep -F package_name
Si package_name correspond à plusieurs packages installés, par exemple en recherchant botoquand botocoreest également installé, alors utiliser -wau lieu de -Fpeut aider, comme le suggère @TaraPrasadGurung. Cela ne répertorie pas le package exact, car les -wcaractères communs aux noms de packages sont des limites de mots. Donc, si vous avez requestset requests-cacheinstallé ou ruamel.yamlet ruamel.yaml.cmd` et que vous avez besoin exactement d'une ligne de sortie, vous devez faire quelque chose comme:
pip list --disable-pip-version-check | grep -E "^ruamel\.yaml "
Veuillez noter que puisque .correspond à n'importe quel caractère lors de son utilisation -E, vous devez y échapper.¹
¹ Et oui c'est nécessaire car il y a un package ruamel_yaml. Tous les gestionnaires de packages ne sont pas pipcompatibles avec les packages d'espace de noms.
-wcomme des limites de mot et sont courants dans les noms de package. J'obtiens plusieurs correspondances lorsque j'utilise votre suggestion en utilisant grep -w ruamel.yamlougrep -w request
pip list | grep -F mxnet-cu101imprime mxnet-cu101 1.5.0, mais pas exactement où il est installé. une idée comment obtenir le chemin installé? `
J'ai trouvé les réponses existantes incomplètes et manquant d'exemples assez bons. Voici la solution sur laquelle j'ai opté:
# 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
Un résumé Github de cet exemple peut être trouvé ici: https://gist.github.com/shaypal5/d505af9953cd86f59c750fa600ee4ba6
Vous pouvez également utiliser quelque chose comme ça dans vos scripts.
python -c "import sys, pkgutil; sys.exit(0 if pkgutil.find_loader('$Package') else 1)"
Ce que vous obtiendriez lorsqu'un package n'est pas installé.
Package=psutil
python3 -c "import sys, pkgutil; sys.exit(0 if pkgutil.find_loader('$Package') else 1)"
echo $?
1
Ce que vous obtiendriez lorsqu'un package est installé.
Package=requests
python3 -c "import sys, pkgutil; sys.exit(0 if pkgutil.find_loader('$Package') else 1)"
echo $?
0
Fonctionne en python2 et python3, puis vous installez en fonction du code de sortie.
J'ai utilisé une version légèrement plus stricte de la réponse d'Anthon, à utiliser dans un script:
pip3 list |
grep -v "^Package *Version$" | grep -v "^-*$" |
cut -d ' ' -f 1 |
grep -xF "$package_name"
Les deux premiers greps sont destinés à supprimer les lignes d'en-tête de la sortie de pip3.
La coupe sélectionne ensuite uniquement les noms de package (en supprimant les numéros de version).
Ensuite, le grep final peut effectuer une recherche exacte pour le $package_name
Si le package est trouvé, il affichera le nom du package et retournera avec le code de sortie 0. Si vous ne voulez pas voir le nom du package, terminez la commande avec >/dev/null
dans un shell / invite Python. :
>>> help('modules')
Testé avec pip3:
$> pip3 show MODULENAME
Le code de sortie ($?) Serait "0" si le module est installé, sinon "1".
Grepping a le problème des "faux positifs": la sortie d'un
pip list | grep NAME
correspondrait à n'importe quel module dont le nom contient "NAME", par exemple également "some_other_NAME".
Tandis que
pip3 show MODULENAME
correspond uniquement sur les matchs complets.
pip install. S'il est déjà installé, il ne le réinstallera pas.