Wenn Sie libA-dev mit libT "testen", was von libA (stable) abhängt, dann testen Sie libA-dev nicht so, wie es sich in einer Produktionsumgebung verhalten würde. Die einzige Möglichkeit, libA-dev wirklich zu testen, ist, den vollen Sprung zu wagen und libT von libA-dev abhängig zu machen. Wenn das Ihre Unit Tests bricht, dann ist das eine gute Sache - es zeigt Ihnen, was repariert werden muss.
Wenn Sie keine Komponententests haben, dann ist es an der Zeit, sie zu erstellen (indem Sie zuerst stable libA und libT verwenden!).
Ich empfehle die Verwendung eines "Versionskontrollsystems" (z. B. bzr, hg, svn, git). Dann könntest du Zweige deines Projektes machen, "stabil" und "devA".
auf Zweig Deva arbeiten zu können, zuerst
export PYTHONPATH=/path/to/devA
Indem sicher, dass die Umgebungsvariable PYTHONPATH schließt die anderen Zweige laufen würde, sind Sie sicher sein, Python nutzt nur die Module, die Sie wünschen.
Wenn es Zeit wird, Code von dev -> stable zu verschmelzen, wird die Versionskontrollsoftware eine einfache Möglichkeit bieten, dies auch zu tun.
Versionskontrolle ermöglicht es Ihnen auch, mutiger zu sein - größere Änderungen zu versuchen ist nicht so beängstigend. Wenn es nicht klappt, ist das Zurücksetzen super einfach. Zwischen diesem und dem PYTHONPATH-Trick können Sie immer wieder zu bekanntem funktionierendem Code zurückkehren.
Wenn Sie glauben, dass das oben Genannte einfach nicht funktioniert und Sie libT-was-abhängig-von-libA benötigt, um libA-dev zu testen, dann müssen Sie alle Module umbenennen und modifizieren alle Importanweisungen, um eine klare Trennung zwischen libA-dev und libA zu erreichen. Wenn beispielsweise libA ein Modul mit dem Namen moduleA.py hat, benennen Sie es in moduleA_dev.py um.
Der Befehl
rename -n 's/^(.*)\.py/$1_dev.py/' *.py
wird "_dev" an alle * .py Dateien hinzufügen. (Mit dem "-n" -Flag wird der Umbenennungsbefehl nur die beabsichtigte Umbenennung anzeigen. Entfernen Sie das "-n", um es tatsächlich zu durchlaufen.)
die Umbenennung rückgängig laufen
rename -n 's/^(.*)_dev\.py/$1.py/' *.py
Weiter Sie alle Verweise auf moduleA zu moduleA_dev im Code ändern müssen. > "ModuleA_dev" - Der Befehl
find /path/to/LibA-dev/ -type f -name '*.py' -exec sed -i 's/moduleA/moduleA_dev/g' {} \;
wird jede * .py Datei in Liba-dev, Ändern "moduleA" ändern.
Seien Sie vorsichtig mit diesem Befehl. Es ist gefährlich, denn wenn Sie eine Variable mit dem Namen moduleAB haben, wird sie in moduleA_devB umbenannt, während Sie eigentlich moduleAB_dev haben wollen.
Um diese Änderung (vorbehaltlich der oben Vorbehalt) zurückzukehren,
find /path/to/LibA-dev/ -type f -name '*.py' -exec sed -i 's/moduleA_dev/moduleA/g' {} \;
Sobald Sie die Namensräume zu trennen, können Sie die zirkuläre Abhängigkeit gebrochen haben. Sobald Sie zufrieden sind, ist Ihr libA-dev gut, Sie könnten moduleA_dev.py ändern -> moduleA.py und ändert alle Verweise auf moduleA_dev -> moduleA in Ihrem Code.
Warum können Sie Ihre normalen Quellcodeverwaltungstools nicht verwenden, um die gewünschte Konfiguration von stabilem und Entwicklungscode zu erstellen? Alle anderen machen das in SVN mit Filialen. Und keine Programmierung. Warum können Sie SVN-Zweige nicht verwenden, um dies zu tun? –
Konnte nicht sehen, was Branching damit zu tun hat, also machte ich die Frage ein wenig klarer, in der Hoffnung, dass es Ihnen helfen wird zu verstehen, was ich versuche zu tun. – abyx