web-dev-qa-db-fra.com

comment tester si un module python a été importé?

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

44
user478514

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.

50
user395760

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

14
John
from sys import modules
try:
    module = modules[module_name]
except KeyError:
    __import__('m')   

c'est ma solution de changer le code à l'exécution!

8
Jack Gao