2017-02-15 1 views
2

Ich möchte ein Python-Modul, das ich schreibe, um ein Abhängigkeitsmodul nur zu importieren, wenn eine Funktion in meinem Modul ausgeführt wird. Dies liegt daran, dass das Abhängigkeitsmodul sehr komplex ist (d. H. Es setzt Serverprogramme laufen usw.) und ist nur auf einigen Systemen verfügbar, auf denen mein Modul verwendet werden soll. I imagine mit meinem Modul in einer Weise, wie folgt aus:Wie kann ein Modul in ein Python-Modul importiert werden, nachdem eine Funktion im Modul ausgeführt wurde?

import mymodule 
mymodule.simple_function() # just a simple function to be used on any system 

mymodule.import_complex_dependencies() 
mymodule.function_that_uses_functionality_of_the_complex_dependency_module() 

Unter der Annahme, dass ich nicht mein Modul in zwei werde geteilt, und dass ich werde nicht ein Submodul machen, was wäre eine Möglichkeit, dies zu tun?

+0

Warum akzeptieren Sie keine der Antworten? –

+0

@Mr_and_Mrs_D Ich bin dankbar für die bisher vorgeschlagenen Lösungen, und diese Lösungen sind für manche Leute nützlich, aber sie sind, soweit ich sehe, keine Lösung für mich. Ich muss vermeiden, das komplexe Modul mehrmals zu importieren. – BlandCorporation

+0

Wenn das Modul einmal importiert wird, wird es nie wieder importiert - was verstehst du nicht? Legen Sie einen Ausdruck in Ihr Modul, folgen Sie der @ user2357112-Lösung und sehen Sie den Ausdruck nur einmal, unabhängig davon, wie viele Methodenaufrufe –

Antwort

4

Wenn nur einige bestimmte Funktion dieses Modul benötigt, haben nur diese spezielle Funktion das Modul importieren:

def func_with_dependencies(): 
    import dependency 
    ... 
+0

Das OP sagt, dass einige Funktionen auf allen Modulen erforderlich sind. – VMAtm

+0

@VMAtm: Was zum Teufel redest du? – user2357112

+0

OP sagte, dass er einige einfache Funktionen von 'mymodule' für alle Systeme benötigt und einige komplizierte für die ausgewählten. Nur versuchen, Ihre Lösung zu klären, warum so gemein? – VMAtm

0

Sie können so etwas tun:

complex_stuff = None 

def load_complex_stuff(): 
    global complex_stuff 
    if complex_stuff is None: 
     import complex_stuff 


def func_using_it(): 
    load_complex_stuff() 
    ... more ... 


def func_using_it_2(): 
    load_complex_stuff() 
    ... more ... 

diese Weise wird die komplexe Sachen bekommt nur einmal geladen.

+1

Wenn ich etwas nicht vermisse, gibt es keine Notwendigkeit für diese Logik ('load_complex_stuff()') als Import ist ein Noop, wenn das Modul bereits importiert wird –

+0

@Claudiu Danke für Ihren Vorschlag. Ich muss vermeiden, dieses komplexe Modul mehrfach zu importieren. – BlandCorporation

Verwandte Themen