Wie bekomme ich die Abhängigkeit der Python-Funktion zum Beizen?

Als Folge dieser Frage: Wie pflückt man eine Pythonfunktion mit seinen Abhängigkeiten?

Was ist ein guter Ansatz zur Bestimmung der Abhängigkeit einer Methode? Zum Beispiel, ähnlich wie die oben genannten Post, wenn ich eine Funktion f, die Methoden g und y verwendet gibt es einen einfachen Weg, um einen Verweis auf g und y dynamisch?

Weiterhin denke ich, dass du diese Methode dazu veranlassen möchtest, den gesamten Funktionsgraphen so zurückzuspielen, dass wenn du von z abhängt, auch b bündeln könntest.

Ich sehe, dass Disco das folgende Modul dazu verwendet: https://github.com/discoproject/disco/blob/master/lib/disco/worker/classic/modutil.py

Irgendwelche anderen Vorschläge, wie man das anpacken kann? Der Disco-Ansatz scheint modulbasiert zu sein, so dass Sie möglicherweise mehr bündeln müssen, als Sie die Root-Methode tatsächlich ausführen müssen.

  • Wie schreibe ich die Funktion mit der Variablen von außen?
  • Ignorieren Sie den Python-Mehrfach-Rückgabewert
  • So senden Sie eine Funktion an ein entferntes Pyro-Objekt
  • Wie schreibe ich eine Python-Funktion, die alle Argumente hinzufügt?
  • Python: Konvertieren von Listen von Listen zu Tupeln von Tupeln
  • Wie man eine Funktion aus einer Zeichenfolge mit Python zu definieren
  • One Solution collect form web for “Wie bekomme ich die Abhängigkeit der Python-Funktion zum Beizen?”

    Um dies zu tun, würde ich Dill benutzen, der fast alles in Python serialisieren kann. Dill hat auch einige gute Werkzeuge für das Helfen Sie zu verstehen, was verursacht Ihr Beizen zu scheitern, wenn Ihr Code fehlschlägt.

    >>> import dill >>> dill.loads(dill.dumps(your_bad_object)) >>> ... >>> # if you get a pickling error, use dill's tools to figure out a workaround >>> dill.detect.badobjects(your_bad_object, depth=0) >>> dill.detect.badobjects(your_bad_object, depth=1) >>> ... 

    Wenn du es absolut wolltest, könntest du Dill's badobjects (oder eine der anderen Erkennungsfunktionen) verwenden, um rekursiv in die Referenzkette deines Objekts einzutauchen und die unpickleable Objekte zu platzieren, anstatt sie in jeder Tiefe wie oben zu rufen.

    Auch objgraph ist ein hübsches handliches Kompliment an die Test-Suite auch.

     >>> # visualize the references in your bad objects >>> objgraph.show_refs(your_bad_object, filename='your_bad_object.png') 

    Oder, wie ich in deiner oben erwähnten Post erwähnt habe, kannst du Dill benutzen, um die ganze Python-Session in einem Befehl zu pflücken. Das ist ein bisschen übertrieben für deine Frage hier, aber es würde auch funktionieren.

    Python ist die beste Programmiersprache der Welt.