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.
- 1. Kompatibilität zwischen CPython und IronPython cPickle
- 2. IronPython ScriptRuntime entspricht CPython PYTHONPATH
- 3. Was sind allgemeine Strategien zum Aktualisieren von Python-Programmen?
- 4. Produktionsreife Python-Implementierungen neben CPython?
- 5. Was sind einige gute Ressourcen zum Verständnis von SNMP MIBs?
- 6. PyPy und CPython: sind große Leistungssteigerungen geplant?
- 7. Schreiben von JUnit-Tests in Jython
- 8. Wie lxml unter IronPython funktioniert?
- 9. Was ist der Unterschied zwischen Python vs Jython vs IronPython vs WxPython?
- 10. CPython von Java?
- 11. Was sind einige der besten Javascript-Speichererkennungstools?
- 12. Was sind einige Ressourcen zum Erlernen von MSIL?
- 13. Was sind einige zeitaufwendige Operationen in C?
- 14. Schreiben eines Socket-basierten Servers in Python, empfohlene Strategien?
- 15. CPython ist Bytecode-Interpreter?
- 16. Was sind einige gute Strategien, um zu ermöglichen, dass bereitgestellte Anwendungen Hotfixes sein können?
- 17. Was ist der Zweck der Sub-Interpreter-API in CPython?
- 18. Der beste Weg, um IronPython zu erkennen
- 19. Was sind einige neue und aufkommende Programmiersprachen?
- 20. Schreiben von XML aus Python: Python entspricht .NET XmlTextWriter?
- 21. Was sind einige maschinelle Lernalgorithmen?
- 22. Was sind einige gute Ansatzpunkte zum Lernen über Algorithmische Skelette?
- 23. Was sind einige Verwendungen von Clojure Metadaten?
- 24. Was sind Ihre Strategien, um XAML in Stile zu setzen?
- 25. Was ist der Unterschied zwischen Jython-Standalone-2.7.0.jar und jython-2.7.0.jar ist
- 26. Javascript: Was sind einige Richtlinien zum Definieren neuer Datentypen?
- 27. Was sind einige gängige Fokus-Stacking-Algorithmen?
- 28. Was sind einige beliebte DSLs?
- 29. Strategien zum Aktualisieren oder Versionieren von Webdiensten?
- 30. Was sind einige clevere Anwendungen von LINQ?
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