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

66

En terminal, après avoir démarré Python, comment saurai-je quels sont les modules présents dans 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é?
posée TechJhola 22.02.2015 - 04:09
la source

9 réponses

56

Comment savoir si un module Python est installé ou non dans le système: vous pouvez effectuer un test très facile dans un 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 depuis le référentiel. Par exemple, vous pouvez installer scipy 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 à l'aide de python-pip comme suggéré par Zack Titan dans commentaire ci-dessous , vous pouvez utiliser numpy

pour installer pip
pip install numpy

Avertissement: Il est vivement recommandé d'installer python-modules en utilisant le référentiel officiel Ubuntu uniquement et de ne pas utiliser la méthode root en tant que superutilisateur (c'est-à-dire, en tant que sudo ou en utilisant pip ). Dans certains cas, cela peut rendre votre système inutilisable en cassant python.

Comment installer des packages en utilisant %code% dans un environnement virtuel local.

    
réponse donnée souravc 22.02.2015 - 04:28
la source
20

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 . importé auparavant.

Dans le problème du shell Python:

>>> import sys

Testez ensuite les modules installés:

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

Notez que seuls les modules qui ont été importés avant donnent True à ce test. Tous les autres modules (même installés) génèrent False.

.

Une autre alternative à try et à une instruction import dans la console python est d'appeler la fonction help() intégrée. Cela ne donnera pas une 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 gestion des paquets Ubuntu (et non la méthode du pip Python), car nous avons besoin d'un accès root et d'éviter également de perturber notre système strongment dépendant de Python. 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.

    
réponse donnée Takkat 22.02.2015 - 12:23
la source
16

Le module pkgutil constitue un autre moyen. 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
    
réponse donnée cuonglm 22.02.2015 - 20:53
la source
9

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

$ 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
    
réponse donnée Avinash Raj 22.02.2015 - 08:56
la source
9

Je sais que l'OP a initialement demandé une solution après avoir démarré Python, mais en dehors de celui-ci, 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

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

Si le module que vous recherchez n'est pas installé, la plupart du temps, vous pourrez facilement l'installer à l'aide du 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>
    
réponse donnée OozeMeister 23.02.2015 - 03:13
la source
6

Pour donner 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

Ceci est légèrement bidon, et pas à quoi -m était destiné; mais c'est le méthode qui nécessite le moins de frappe si vous voulez un test rapide: -)

    
réponse donnée Martin Tournoij 22.02.2015 - 20:04
la source
3

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'])
    
réponse donnée Mona Jalal 21.10.2016 - 21:57
la source
3

Vérification de l’un des doublons (utile pour l’approvisionnement)

J'ai constaté que pour rendre mon infrastructure d'approvisionnement ** idempotente, je devais être en mesure de rechercher un package dans le shell dans un doubleur. J'ai construit sur la réponse de @ cuonglm. Je devais inverser 1 et 0 car je produisais 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 bien la lisibilité de l'avoir à la fin.

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

** Je constate que chef , puppet , et ansible ont tous des plugins pour la gestion des paquets python, mais vous peut se retrouver dans une situation semblable à moi, où vous utilisez une version obsolète et ne souhaitez pas utiliser de plugins obsolètes.

    
réponse donnée Bruno Bronosky 09.03.2017 - 20:25
la source
1

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 dans le 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 dans cette question connexe: link

    
réponse donnée Sergiy Kolodyazhnyy 06.01.2017 - 12:24
la source

Lire d'autres questions sur les étiquettes