Мой комментарий на этот ответ .
Я написал /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)
Обратите внимание, что шебанг указывает на python3 и локальную переменную файла py-python-command.
Я также написал /t/min-py.el, который гарантирует, что вместо python.el используется python-mode.el (версия 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.
Я даже могу изменить вторую строку /t/min.py на эту:
# -*- py-python-command: "chunkybacon"; -*-
и повторите этот эксперимент, и emacs по-прежнему использует python2.
Если последняя строка файла /t/min-py.el не закомментирована, то C-c C-c и C-c! оба используют python3.