2015-05-27 21 views
21

Wie überprüfe ich, ob ich ein Modul irgendwo im Code importiert habe?Wie überprüft man, ob ein Python-Modul importiert wurde?

if not has_imported("sys"): 
    print 'you have not imported sys' 

Der Grund, dass Ich mag wäre zu prüfen, ob ich bereits ein Modul importiert ist, weil ich ein Modul haben, das ich will nicht importieren, weil es manchmal mein Programm vermasselt.

+0

Nur Systemerror() '(oder andere Ausnahme stellen' erhöhen Ihrer Wahl) am oberen Rand des Moduls, das Sie nicht importieren möchten. Wenn Sie es * tatsächlich * irgendwo importieren, wird Ihr Programm eine Traceback- und Exit-Funktion auslösen. – larsks

+0

Wie bringt das Importieren eines Moduls Ihr Programm trotzdem durcheinander? Klingt nicht so wahrscheinlich. –

+1

@BillWoodger: vielleicht dieses Modul [ändert globalen Status, den Sie nicht ändern möchten] (https://stackoverflow.com/questions/23918716/reloading-a-module-gives-functionality-that-ist-original-available-by -import/23918750 # 23918750). –

Antwort

31

-Test für die Modulnamen in den sys.modules dictionary:

import sys 

modulename = 'datetime' 
if modulename not in sys.modules: 
    print 'You have not imported the {} module'.format(modulename) 

Vom documenation:

Dies ist ein Wörterbuch, das Modulname zu Modulen abbildet, die bereits geladen wurden.

+0

Wie kann dies für andere Module verwendet werden, hat das Modul datetime – The6thSense

+3

@VigneshKalai: Dieser Satz wird nicht analysiert, sorry. 'sys.modules' enthält alle verwendeten Module * irgendwo in der aktuellen Instanz des Interpreters *. Wenn 'datetime' in irgendeinem anderen Python-Modul * verwendet wird, wird es dort angezeigt. –

+0

@VigneshKalai ... und datetime war nur ein Beispielmodul, Sie würden es durch den Namen des Moduls ersetzen, das Sie fürchten. –

8

Verwendung sys.modules zu testen, ob ein Modul importiert wurde (ich verwende als Beispiel unicodedata):

>>> import sys 
>>> 'unicodedata' in sys.modules 
False 
>>> import unicodedata 
>>> 'unicodedata' in sys.modules 
True 
-1
if "sys" not in dir(): 
    print("sys not imported!") 
+0

Das überprüft nur, ob das Modul im aktuellen Namespace importiert wurde. Auch "sys" kann alles sein, nicht nur ein Modul. – vaultah

Verwandte Themen