Мой комментарий к this answer.
Я написал /t/min.py, который будет прекрасно работать в Python3, но не в python2 (словарь понимание работы в Python3)
Содержание /t/min.py
#!/usr/bin/python3
# -*- py-python-command: "/usr/bin/python3"; -*-
a = {i:i**2 for i in range(10)}
print(a)
Обратите внимание, что shebang указывает на python3 и локальную переменную py-python файла.
Я также написал /t/min-py.el, который гарантирует, что вместо python.el используется python-mode.el (ver 5.1.0).
Содержание /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")
Обратите внимание, что последняя строка является комментарием.
Я начинаю Emacs с помощью следующей команды:
emacs -Q -l /t/min-py.el /t/min.py &
Теперь Emacs запускается с моим альтернативным dotemacs /t/min-py.el, и это открывает /t/min.py.
Когда я нажимаю C-c C-c для отправки буфера на python, он говорит, что часть «for» неверна и указывает, что вместо python3 используется python2. Когда я нажимаю C-c! для запуска интерпретатора python, он говорит, что запускается python 2.5.
Я могу изменить вторую строку/т/мин.py к этому:
# -*- py-python-command: "chunkybacon"; -*-
и повторите этот эксперимент, и emacs по-прежнему использует python2.
Если последняя строка /t/min-py.el не закомментирована, то C-c C-c и C-c! оба используют python3.
Вы задаетесь вопросом, как получить Emacs для автоматического обнаружения ли вы пишете Python 2 кода или Python 3 кода, и назвать правильную версию Python? Или вы спрашиваете, как сменить Emacs так, чтобы он вызывал другую команду (т.е. python3) во всех случаях, когда код Python загружается в буфер? –
Очевидно, что первый был бы идеальным, но это кажется довольно сложным, так как синтаксические различия между Python 2 и Python 3 незначительны. Похоже, что ответы на этот вопрос позаботятся о втором случае. Спасибо за разъяснения. – 2009-02-03 22:48:36