Mein Kommentar zu diese Antwort .
Ich habe /t/min.py geschrieben, das in Python3 gut läuft, aber nicht in Python2 (Wörterbuchverstehen funktioniert in Python3)
Inhalt von /t/min.py
#!/usr/bin/python3
# -*- py-python-command: "/usr/bin/python3"; -*-
a = {i:i**2 for i in range(10)}
print(a)
Beachten Sie, dass der shebang auf python3 und die lokale Variable py-python-command hinweist.
Ich habe auch /t/min-py.el geschrieben, das sicherstellt, dass python-mode.el (ver 5.1.0) anstelle von python.el verwendet wird.
Inhalt von /t/min-py.el
(add-to-list 'load-path "~/m/em/lisp/")
(autoload 'python-mode "python-mode" "Python Mode." t)
;; (setq py-python-command "python3")
Beachten Sie, dass die letzte Zeile auskommentiert ist.
Ich starte emacs mit dem folgenden Befehl:
emacs -Q -l /t/min-py.el /t/min.py &
Jetzt wird emacs mit meinem alternativen dotemacs /t/min-py.el gestartet und es öffnet /t/min.py.
Wenn ich C-c C-c drücke, um den Puffer an Python zu senden, sagt es, dass der "for"-Teil falsch ist und das bedeutet, dass Python2 statt Python3 verwendet wird. Wenn ich C-c ! drücke, um den Python-Interpreter zu starten, sagt er, dass Python 2.5 gestartet ist.
Ich kann sogar die zweite Zeile von /t/min.py wie folgt ändern:
# -*- py-python-command: "chunkybacon"; -*-
und führe dieses Experiment erneut durch, und Emacs verwendet immer noch Python2.
Wenn die letzte Zeile von /t/min-py.el nicht auskommentiert ist, dann verwenden C-c C-c und C-c ! beide Python3.
1 Stimmen
Fragen Sie sich, wie Sie Emacs dazu bringen können, automatisch zu erkennen, ob Sie Python-2-Code oder Python-3-Code schreiben, und die richtige Python-Version aufzurufen? Oder fragen Sie sich, wie Sie Emacs so ändern können, dass er in jedem Fall einen anderen Befehl (z. B. python3) aufruft, wenn Python-Code in den Puffer geladen wird?
0 Stimmen
Natürlich wäre das erste ideal, aber das scheint ziemlich schwierig zu sein, da die syntaktischen Unterschiede zwischen Python 2 und Python 3 gering sind. Es sieht so aus, als würden die Antworten auf diese Frage den zweiten Fall abdecken. Danke für die Klarstellung.