web-dev-qa-db-fra.com

Comment vérifier si un module est installé dans Python et l'installer si nécessaire?

En terminal, après avoir démarré Python, comment saurai-je quels sont les modules présents en python? Supposons que je doive apprendre les modules NumPy et SciPy.

  • Comment vais-je l'installer s'il n'est pas installé?
  • Comment saurai-je s'il est déjà installé?
79
TechJhola

Comment savoir si un module python est installé ou non dans le système: Vous pouvez effectuer un test très facile dans le terminal,

$ 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

Comment vais-je l'installer s'il n'est pas installé

Vous pouvez installer un module spécifique en téléchargeant les packages correspondants à partir du référentiel. Par exemple, vous pouvez install scipyname __ comme,

Sudo apt-get install python-scipy ## for Python2
Sudo apt-get install python3-scipy ## for Python3

Alternativement Vous pouvez également installer un module python en utilisant python-pip comme suggéré par Zack Titan dans le commentaire ci-dessous , Pour installer numpyvous pouvez utiliser

pip install numpy

Avertissement: Il est fortement recommandé d'installer python-modules en utilisant uniquement le référentiel Ubuntu officiel et de ne pas utiliser la méthode pipde la manière suivante: superutilisateur (c'est-à-dire comme rootou en utilisant Sudoname__). Dans certains cas, cela peut rendre votre système inutilisable en cassant python.

Comment installer des packages utilisant pipdans un environnement virtuel local.

64
souravc

Si nous ne souhaitons pas importer involontairement un module en question (ce qui se produirait dans une instruction try), nous pouvons utiliser sys.modules pour tester les modules installés et ont été importés auparavant.

Dans le problème python Shell:

>>> import sys

Puis testez les modules installés:

>>> 'numpy' in sys.modules
True
>>> 'scipy' in sys.modules
False

Notez que seuls les modules importés auparavant attribuent True à ce test. Tous les autres modules (même s'ils sont installés) génèrent False.

Une autre alternative à try et une instruction import dans la console python appelle la fonction help() intégrée. Cela ne donnera pas de documentation pour les modules non installés, par exemple.

>>> help('scipy')
no Python documentation found for 'scipy'

La sortie de très longs documents d’aide des modules installés peut être interrompue avec Q.

Maintenant, pour installer les modules manquants, il est recommandé d’utiliser la méthode gestion des paquets Ubunt (et non pas la façon de piper Python _) car nous avons besoin d’un accès root et nous devons également éviter de gâcher notre système Python- Dépend du système. Pour le module en question, cela serait par exemple être:

Sudo apt-get install python-scipy ## for Python2
Sudo apt-get install python3-scipy ## for Python3

Après l'installation, nous pouvons ensuite les ajouter au dictionnaire sys.modules en les important une fois.

21
Takkat

Une autre méthode est le module pkgutil . Fonctionne avec Python 2 & 3:

python -c 'import pkgutil; print(1 if pkgutil.find_loader("module") else 0)'

Vous devez remplacer module par le nom de votre module, exemple:

$ python -c 'import pkgutil; print(1 if pkgutil.find_loader("math") else 0)'
1
17
cuonglm

Je sais que l'OP avait initialement demandé une solution après avoir démarré Python, mais en dehors de python, j'utilise pip. Sur ubuntu: Sudo apt-get install python-pip, s'il n'est pas déjà installé.

Ensuite, pour voir quels modules tiers sont disponibles, lancez simplement:

pip freeze

Ou même

pip list

Et tous les deux vous montreront tous les modules installés et leurs versions.

Si le module que vous recherchez n'est pas installé, vous pouvez généralement l'installer facilement avec pip:

pip install <module-name>

Si vous n'êtes pas sûr de l'existence d'un module ou de son nom PyPI, utilisez pip search:

pip search <keyword>
11
OozeMeister

Vous pouvez insérer le code dans le bloc try, except.

$ python3 -c "\
try:
    import cow  
    print('\nModule was installed')
except ImportError:
    print('\nThere was no such module installed')"

There was no such module installed

$ python3 -c "\
try:
    import regex
    print('\nModule was installed')
except ImportError:
    print('\nThere was no such module installed')"

Module was installed
10
Avinash Raj

Pour fournir une autre réponse, par souci d'achèvement:

Vous pouvez (ab) utiliser l'option -m. De la page de manuel de Python:

   -m module-name
          Searches sys.path for the named module and runs the  correspond‐
          ing .py file as a script.

Ce qui nous donnera:

$ python2 -m numpy
/sbin/python2: No module named numpy.__main__; 'numpy' is a package and cannot be directly executed

$ python2 -m math
/sbin/python2: No code object available for math

Mais pour les modules inexistants, cela nous donnera:

$ python2 -m doesnt_exist
/sbin/python2: No module named doesnt_exist

Nous pourrions utiliser grep pour correspondre à ceci:

$ python2 -m doesnt_exist |& grep -q 'No module named' && echo 'Nope' || echo 'Yup'
Nope

$ python2 -m math |& grep -q 'No module named' && echo 'Nope' || echo 'Yup'
Yup

C'est un peu bidouillé, et pas ce que -m était destiné à; mais c'est la méthode qui nécessite le moins de frappe si vous voulez un test rapide :-)

6
Martin Tournoij

J'ai écrit un exemple en Python:

import pip
import sys
from bigml.api import BigML


if not 'bigml' in sys.modules.keys():
    pip.main(['install', 'bigml'])
3
Mona Jalal

Shell oneliner check (utile pour le provisionnement)

J'ai constaté que pour rendre mon infrastructure ** indéfectible, je devais être en mesure de rechercher un package dans Shell dans un doubleur. J'ai construit sur la réponse de @ cuonglm. J'ai dû inverser les 1 et 0 car je produis un état de sortie plutôt que d'imprimer une chaîne.

python -c "import sys, pkgutil; sys.exit(0 if pkgutil.find_loader(sys.argv[1]) else 1)" pymongo

Vous pouvez remplacer le sys.argv[1] par le nom entre guillemets unique de votre paquet, mais pour mes scripts de provisioning, j'aime la lisibilité de l'avoir à la fin.

python -c "import sys, pkgutil; sys.exit(0 if pkgutil.find_loader('pymongo') else 1)"

** Je me rends compte que chef , marionnette , et ansible ont tous des plugins pour gérer les paquets python, mais vous pouvez trouver vous-même dans une situation comme moi où vous utilisez une version obsolète et ne souhaitez pas utiliser de plugins obsolètes.

3
Bruno Bronosky

On peut aussi utiliser pydoc modules, qui peut être filtré avec grep pour trouver un module spécifique. La sortie est affichée sous forme de colonne. Le seul inconvénient de cette approche est qu’elle inclura également les fichiers python du répertoire de travail en cours. Néanmoins, je l'utilise moi-même la plupart du temps et c'est l'une des approches les plus citées sur cette question connexe: https://stackoverflow.com/q/739993/3701431

1

À partir du shell Ubuntu, par défaut bash, aussi simple que

pip list | grep <package-name-Case-Matters>

Exemples

pip list | grep pywinrm

pip list | grep numpy

Et, si vous avez des doutes sur le cas (bien que je pense que tous les noms de paquets sont toujours en minuscules):

pip list | grep [Nn]um[Pp]y  # it works with numpy, Numpy, numPy, and NumPy
0
xCovelus