Ergebnis 1 bis 5 von 5
  1. #1
    fanatic ;) Avatar von issen9
    Registriert seit
    Apr 2007
    Beiträge
    629

    Standard Python Module dynamisch neuladen

    Ich programmiere zur Zeit an einem kleinen Python Projekt, das ein Hauptmodul hat, welches gestartet wird. Dieses wiederum importiert dynamisch vorher registrierte Events aus anderen Modulen:
    PHP-Code:
    for plugin in PLUGINS:
        
    exec(b"from " plugin b" import *"
    Es ist sichergestellt, dass die importierten Module nur jeweils ihre Events beinhalten und keine weiteren globalen Variables, so dass hoffentlich keine Namenskonflikte auftreten sollten. (Falls jemand eine Idee hat, wie ich das schöner implementieren kann, ich bin dafür offen.)

    Jetzt will ich ein Event namens "!reload" registrieren mit dem ich dann einzelne Module neuladen kann, weil ich darin was verändert habe, ohne das ganze Skript jedoch neustarten zu müssen.

    Jetzt mein Problem, ich habe einfach das obige Statement für das entsprechende Modul erneut ausgeführt, jedoch scheint das nichts zu bringen, sprich es werden immer noch die alten Funktionen aufgerufen?

    Laut den docs sollte das IMHO gehen:
    If a module imports objects from another module using from ... import ..., calling reload() for the other module does not redefine the objects imported from it — one way around this is to re-execute the from statement, another is to use import and qualified names (module.*name*) instead.
    Ich benutze Python 3.1

    greets

  2. #2
    Trashgigant ;)

    ex-Moderator

    Avatar von Scrion
    Registriert seit
    Jul 2000
    Ort
    Golgotha
    Beiträge
    7.571

    Standard Re: Python Module dynamisch neuladen

    Falls jemand eine Idee hat, wie ich das schöner implementieren kann, ich bin dafür offen.
    http://lucumr.pocoo.org/2006/7/30/setuptools-plugins
    http://aroberge.blogspot.com/2008/12...ols-based.html
    http://base-art.net/Articles/64/

  3. #3
    fanatic ;)

    (Threadstarter)

    Avatar von issen9
    Registriert seit
    Apr 2007
    Beiträge
    629

    Standard Re: Python Module dynamisch neuladen

    Sieht ein wenig aus wie Overkill. Kann man da Plugins zur Laufzeit auch erneut laden?

  4. #4
    Mitglied
    Registriert seit
    Jun 2003
    Beiträge
    209

    Standard Re: Python Module dynamisch neuladen

    Für das dynamische Importieren von Modulen kann __import__ verwendet werden. Das Neuladen von Modulen, sollte mit imp.reload möglich sein.

  5. #5
    fanatic ;)

    (Threadstarter)

    Avatar von issen9
    Registriert seit
    Apr 2007
    Beiträge
    629

    Standard Re: Python Module dynamisch neuladen

    Zitat Zitat von ixlc Beitrag anzeigen
    Für das dynamische Importieren von Modulen kann __import__ verwendet werden. Das Neuladen von Modulen, sollte mit imp.reload möglich sein.
    imp.reload funktioniert in meinem Fall nicht, siehe:
    If a module imports objects from another module using from ... import ..., calling reload() for the other module does not redefine the objects imported from it — one way around this is to re-execute the from statement, another is to use import and qualified names (module.*name*) instead.
    und das import Statement funktioniert glaube ich nicht mit absoluten Filenamen.

  6.  
     
     

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •