J'ai besoin de savoir si un module python existe, sans l'importer.
Importer quelque chose qui pourrait ne pas exister (pas ce que je veux):
try:
import eggs
except ImportError:
pass
python
python-import
yarbelk
la source
la source
Réponses:
Python2
Pour vérifier si l'importation peut trouver quelque chose dans python2, utilisez
imp
Pour trouver des importations pointées, vous devez faire plus:
Vous pouvez également utiliser
pkgutil.find_loader
(plus ou moins le même que la partie python3Python3
Python3 ≤ 3,3
Vous devriez utiliser
importlib
, Comment j'ai fait cela était:Mon attente étant, si vous pouvez trouver un chargeur pour cela, alors il existe. Vous pouvez également être un peu plus intelligent à ce sujet, comme filtrer les chargeurs que vous accepterez. Par exemple:
Python3 ≥ 3,4
Dans Python3.4, la
importlib.find_loader
documentation python était obsolète au profit deimportlib.util.find_spec
. La méthode recommandée est laimportlib.util.find_spec
. Il y en a d'autres commeimportlib.machinery.FileFinder
, ce qui est utile si vous recherchez un fichier spécifique à charger. Comprendre comment les utiliser dépasse le cadre de cela.Cela fonctionne également avec les importations relatives, mais vous devez fournir le package de départ, vous pouvez donc également faire:
Bien que je sois sûr qu'il existe une raison de faire cela, je ne suis pas sûr de ce que ce serait.
AVERTISSEMENT
Lorsque vous essayez de trouver un sous-module, il importera le module parent (pour toutes les méthodes ci-dessus)!
commentaires bienvenus pour contourner ce problème
Remerciements
find_loader
la source
eggs.ham.spam
.spam
eneggs.ham
vous utiliseriezimp.find_module('spam', ['eggs', 'ham'])
imp
est obsolète au profit deimportlib
Python 3.pkgutil.find_loader("my.package.module")
retourne un chargeur si le package / module existe etNone
sinon. Veuillez mettre à jour votre réponse pour Python 2, car le masquage de l'ImportError m'a rendu fou hier xPAprès avoir utilisé la réponse de yarbelk, je l'ai fait pour ne pas avoir à importer
ìmp
.Utile dans Django
settings.py
par exemple.la source
Python 3> = 3.6: ModuleNotFoundError
Le
ModuleNotFoundError
a été introduit dans python 3.6 et peut être utilisé à cette finL'erreur est générée lorsqu'un module ou l'un de ses parents est introuvable. Alors
affichera un message qui ressemble à
No module named 'eggs'
si leeggs
module est introuvable; mais afficherait quelque chose commeNo module named 'eggs.sub'
si seul lesub
module ne pouvait pas être trouvé mais que leeggs
paquet pouvait être trouvé.Consultez la documentation du système d'importation pour plus d'informations sur le
ModuleNotFoundError
la source
Python 2, sans compter ImportError
Jusqu'à ce que la réponse actuelle soit mise à jour, voici le chemin pour Python 2
Pourquoi une autre réponse?
Beaucoup de réponses utilisent la capture d'un fichier
ImportError
. Le problème avec cela est que nous ne pouvons pas savoir ce qui jette leImportError
.Si vous importez votre module existant et qu'il se trouve qu'il y en a un
ImportError
dans votre module (par exemple une faute de frappe sur la ligne 1), le résultat sera que votre module n'existe pas. Il vous faudra beaucoup de retour en arrière pour comprendre que votre module existe et qu'ilImportError
est intercepté et fait échouer les choses en silence.la source
ImportError
- veuillez modifier si cela ne vous était pas clair.La réponse de go_as en une seule ligne
la source
Je suis tombé sur cette question en cherchant un moyen de vérifier si un module est chargé à partir de la ligne de commande et j'aimerais partager mes réflexions sur ceux qui viennent après moi et à la recherche de la même chose:
Méthode de fichier de script Linux / UNIX : créer un fichier
module_help.py
:Ensuite, assurez-vous qu'il est exécutable:
chmod u+x module_help.py
Et appelez-le avec un
pipe
àgrep
:Méthode interactive : dans le chargement de la console
python
Si trouvé, quittez la lecture en tapant
q
Pour quitter la session interactive python, appuyez sur Ctrl+D
Méthode de fichier de script Windows également compatible Linux / UNIX, et meilleure dans l'ensemble :
L'appel à partir de la commande comme:
Produirait:
et vous devrez appuyer sur
q
pour quitter le mode interactif.En utilisant ce module inconnu:
Produirait:
et sortir.
la source
Utilisez l'une des fonctions de pkgutil , par exemple:
la source
Une instruction if plus simple d'AskUbuntu: Comment vérifier si un module est installé en Python?
la source
Vous pouvez simplement écrire un petit script qui essaierait d'importer tous les modules et vous dirait lesquels échouent et lesquels fonctionnent:
Production:
Parole d'avertissement, cela essaiera de tout importer pour que vous voyiez des choses comme
PyYAML failed with error code: No module named pyyaml
parce que le nom d'importation réel est juste yaml. Donc, tant que vous connaissez vos importations, cela devrait faire l'affaire pour vous.la source
J'ai écrit cette fonction d'assistance:
la source
Vous pouvez également utiliser
importlib
directementla source
Il n'y a aucun moyen de vérifier de manière fiable si le "module pointillé" est importable sans importer son package parent. En disant cela, il existe de nombreuses solutions au problème "comment vérifier si le module Python existe".
La solution ci-dessous résout le problème que le module importé peut soulever ImportError même s'il existe. Nous voulons distinguer cette situation de celle dans laquelle le module n'existe pas.
Python 2 :
Python 3 :
la source
dans django.utils.module_loading.module_has_submodule
la source