Comment tester si un module a été importé en python?
par exemple j'ai besoin des bases:
if not has_imported("sys"):
import sys
aussi
if not has_imported("sys.path"):
from sys import path
Merci!
Rgs.
Merci pour tous vos commentaires: le code a été collé ici. importation automatique de tous les sous-modules dans un dossier puis appelez les fonctions du même nom - python runtime inspect related
Si vous souhaitez optimiser en n'important pas les choses deux fois, épargnez-vous les tracas car Python s'occupe déjà de cela.
Si vous besoin ceci pour éviter NameErrors
ou quelque chose: Corrigez votre codage bâclé - assurez-vous que vous n'en avez pas besoin, c'est-à-dire définissez (importez) tout avant de l'utiliser (dans le cas si import: une fois, au démarrage, au niveau du module).
Si vous avez une bonne raison: sys.modules
est un dictionnaire contenant tous les modules déjà importés quelque part. Mais il ne contient que des modules, et à cause de la façon dont from <module> import <variable>
fonctionne (importez l'intégralité du module comme d'habitude, extrayez ce que vous importez), from sys import path
n'ajouterait que sys
à sys.modules
(s'il n'a pas déjà été importé au démarrage). from pkg import module
ajoute pkg.module
comme vous vous y attendez probablement.
Je pense que la réponse qui a été acceptée n'est pas entièrement correcte.
Python a toujours des frais généraux lors de l'importation du même module plusieurs fois. Python le gère sans vous donner d'erreur , bien sûr, mais cela ne signifie pas qu'il ne ralentira pas comme vous le verrez dans l'URL ci-dessous, il y a une surcharge importante lors de l'importation multiple d'un module.
Par exemple, dans une situation où vous n'avez peut-être pas besoin d'un certain module, sauf dans une condition particulière, si ce module est volumineux ou a une surcharge élevée, il y a lieu d'importer uniquement à condition. Cela ne signifie pas non plus explicitement que vous êtes un codeur bâclé.
https://wiki.python.org/moin/PythonSpeed/PerformanceTips#Import_Statement_Overhead
from sys import modules
try:
module = modules[module_name]
except KeyError:
__import__('m')
c'est ma solution de changer le code à l'exécution!