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 pip
la list
commande 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 boto
quand botocore
est également installé, alors utiliser -w
au lieu de -F
peut aider, comme le suggère @TaraPrasadGurung. Cela ne répertorie pas le package exact, car les -w
caractères communs aux noms de packages sont des limites de mots. Donc, si vous avez requests
et requests-cache
installé ou ruamel.yaml
et 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 pip
compatibles avec les packages d'espace de noms.
-w
comme 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.yaml
ougrep -w request
pip list | grep -F mxnet-cu101
imprime 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.