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 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
Vous pouvez installer un module spécifique en téléchargeant les packages correspondants à partir du référentiel. Par exemple, vous pouvez install scipy
name __ 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 numpy
vous 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 pip
de la manière suivante: superutilisateur (c'est-à-dire comme root
ou en utilisant Sudo
name__). Dans certains cas, cela peut rendre votre système inutilisable en cassant python.
Comment installer des packages utilisant pip
dans un environnement virtuel local.
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.
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
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>
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
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 :-)
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'])
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.
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
À 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