Sie Muss machen beide Versionen des Codes vorhanden/zugänglich, um aufzurufen beide Versionen des Codes dynamisch.
Der bei weitem einfachste Weg, dies zu erreichen, ist, beide Versionen des Codes an verschiedenen Orten zu haben, wie in VonC's answer.
Da Python ist, was es ist, aber Sie könnte dynamisch bestimmte Versionen von bestimmten Quelldateien extrahieren, kompilieren sie on the fly (dynamische Importe und temporäre Dateien verwenden oder exec
und interne Strings) und damit Code ausführen das zeigt sich nicht in zufälliger Durchsicht der Programmquelle. I nicht ermutigen diesen Ansatz: es ist schwierig (wenn auch nicht sehr schwierig) und fehleranfällig, neigt zu Sicherheitslücken, und ist insgesamt eine schreckliche Art zu arbeiten, es sei denn, Sie schreiben etwas wie ein Python-Debugger oder IDE. Aber wenn das ist, was Sie tun wollen, zerlegen Sie einfach das Problem in:
- untersuchen und/oder extrahieren, bestimmte Dateien von bestimmten Commits (
git show
, git cat-file -p
, etc.), und
- dynamisch laden oder ausführen Code aus der Datei im Dateisystem oder aus der Zeichenfolge im Speicher.
Das erste ist ein Git-Programmierung Übung (und ist ziemlich trivial, git show 1234567:foo.py
oder git show branch:foo.py
: Sie können die Ausgabe in eine Datei umleiten kann entweder Shell-Umleitung oder Python subprocess
-Modul), und wenn sie mit Dateien gemacht, der zweite eine Python-Programmierübung mittlerer Schwierigkeit: siehe the documentation, wobei besonders auf importlib
zu achten ist.
Es kann hilfreich sein, wenn Sie erklären können, warum Sie dies z. warum Sie nicht den gesamten Code haben können, den Sie für einen Zweig benötigen. Dies scheint ein XY-Problem zu sein. http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem –
@TomDalton Ich habe die Frage aktualisiert, um die Details zu erklären – proprius
Warum ist diese Frage downvoted? – proprius