Python zwingen, eine ältere Modulversion zu verwenden (als die, die ich jetzt installiert habe)

9

Mein Arbeitgeber hat ein eigenes Modul 1 , das wir für den internen Einheiten- / Systemtest verwenden; der Autor dieses Moduls arbeitet hier jedoch nicht mehr und ich wurde gebeten, einige Geräte damit zu testen.

Das Problem ist, dass pyfoo eine alte Version von twisted (v8.2.0) benötigt und twisted in 33 verschiedene Dateien importiert. Ich habe versucht, pyfoo Einheitentests unter v11.0.0 laufen zu lassen und ich sehe nicht einmal TCP-SYN-Pakete 2 . Leider habe ich bereits twisted v11.0.0 auf meinem lab linux server installiert und ich habe meinen eigenen Code, der davon abhängt.

Ich habe mein Gehirn für einen Weg in diese Richtung gequält, aber ich kann nur die folgenden Optionen vorschlagen:

Option A . Installiere eine neue Version von Python, installiere virtualenv und installiere dann eine alte Version von twisted unter dem virtualenv . Führen Sie die Tests, die pyfoo erfordern, nur unter dieser neuen Version von python aus.

Option B . Bearbeiten Sie alle 33 Dateien mit den folgenden: DIR = '../'; sys.path.insert(0, DIR) und installieren Sie die alte Version von Python im entsprechenden Verzeichnis unterhalb der Quelle.

Option C . Versuch, pyfoo zu reparieren, um v11.0.0 3

zu verwenden

Gibt es irgendwelche Optionen, die mir fehlen? Gibt es einen eleganteren Weg, um dieses Problem zu lösen, neben Option A, oben?

END-NOTES:
  1. Wir nennen es pyfoo wegen des Arguments
  2. Die Komponententests stellen eine Verbindung zu einem unserer lokalen Laborserver her und üben grundlegende Telnet-Funktionen
  3. aus
  4. Diese Option ist fast ein Nicht-Starter ... pyfoo ist nicht trivial, und ich habe eine kurze Frist für diese Arbeit.
Mike Pennington 22.06.2011, 19:07
quelle

3 Antworten

21

Eine bessere Version von Option B. wäre das Ersetzen von

%Vor%

von

%Vor%

wird dafür sorgen, dass die korrekte Version von twisted importiert wird, solange sie installiert ist, und löst sonst eine Ausnahme aus. Dies ist eine tragbare Lösung.

Dies wird jedoch nicht funktionieren (noch würde irgendeine andere Variante von Option B), falls verdreht, importiert werden, bevor% code_% aufgerufen wird; pkg_resources.require ist bereits in twisted

OP Bearbeiten : Untergeordnete Syntaxkorrektur, nach sys.modules docs

    
SingleNegationElimination 22.06.2011, 19:29
quelle
1

Ich kann Ihnen nicht sagen, was in Ihrer Situation am besten ist, aber Sie könnten vielleicht Folgendes in Erwägung ziehen:

Option D: Ausführen in einer virtuellen Maschine (z. B. mit Windows 7)

Option E: alte Version von python / twisted auf einem anderen Rechner installieren

    
Gerrat 22.06.2011 19:23
quelle
0

Wenn die Lösung von SingleNegationElimination nicht funktioniert, beachten Sie, dass Sie nicht alle 33 Instanzen des Imports ersetzen müssen. Sie müssen nur sys.path an den Einstiegspunkten ändern; z.B. Sie können nur die __init__.py -Dateien Ihres Moduls als Ziel verwenden.

Dort würden Sie z.B.

%Vor%     
jmetz 12.10.2016 13:15
quelle