Mit dem Versuch, zwei dieser Umgebungen zur gleichen Zeit zu zielen, kann ich sicher sagen, wenn Sie eine Datenbank usw. verwenden müssen Sie am Ende müssen schreibe einen eindeutigen Code für diese Umgebung. Hast du einen guten Weg, mit dieser Situation umzugehen?Was sind einige Strategien zum Schreiben von Python-Code, der in CPython, Jython und IronPython funktioniert
Antwort
Wenn Sie tun finden Sie einzigartige Code für eine Umgebung, verwenden Pythons
import mymodule_jython as mymodule
import mymodule_cpython as mymodule
haben dieses Material in einem einfachen Modul (‚‘ module_importer ‚‘?) Und geben Sie Ihren Code wie folgt schreiben müssen :
from module_importer import mymodule
auf diese Weise alles, was Sie tun müssen, ist module_importer.py
pro Plattform ändern.
@Daren Thomas: Ich stimme zu, aber Sie sollten die platform module verwenden, um festzustellen, welchen Interpreter Sie ausführen.
Soweit ich weiß, ist 'Plattform' in IronPython (2.0.1) nicht verfügbar. 'os' ist auch nicht. – Cyberdrow
Ich schreibe Code für CPython und IronPython aber Tipp sollte auch für Jython funktionieren.
Grundsätzlich schreibe ich den gesamten plattformspezifischen Code in separaten Modulen/Paketen und importiere dann den passenden, basierend auf der Plattform, auf der ich laufe. (siehe Kommentar von Cdleary)
Dies ist besonders wichtig, wenn es um die Unterschiede zwischen den SQLite-Implementierungen geht und wenn Sie einen GUI-Code implementieren.
Die # 1 Sache IMO: Fokus auf Thread Sicherheit. CPythons GIL macht das Schreiben von threadsafe-Code einfach, da immer nur ein Thread auf den Interpreter zugreifen kann. IronPython und Jython sind etwas weniger handhaltend.
Ich bin mir ziemlich sicher, dass Sie bereits wissen, aber leider Jython can't load c extension modules.
Es gibt zwei großen Fragen hier im Spiel ...
Erstens, meines Wissens, nur CPython hat RAII - Sie Schließen Sie Ihre eigenen Ressourcen in Jython, Ironpython, etc.
Und zweitens, wie bereits erwähnt wurde, ist Thread-Sicherheit.
So Daren, gibt es eine Möglichkeit, module_importer die richtige Variable dynamisch basierend auf einige Umgebungsvariable etc. importieren zu lassen. – minty
Entschuldigung, ich zeichne ein Leerzeichen hier. Dies wäre jedoch eine hervorragende SO-Frage: "Wie kann ich dynamisch herausfinden, ob wir Jython, CPython oder IronPython ausführen?". Dann könntest du es einfach in ifs machen ... –
Pythons Modul 'os' kann als Beispiel verwendet werden. Es bietet OS-Routinen wie "os.unlink", "os.rename" usw. je nachdem, auf welchem System Sie arbeiten. – jfs