我一直在使用Emacs编写Python 2代码。现在我在我的系统上安装了Python 2.6和3.0,我也需要编写Python 3代码。
以下是在/ usr / bin中设置不同版本的方法:
python -> python2.6*
python2 -> python2.6*
python2.6*
python3 -> python3.0*
python3.0*
有没有办法设置它,以便Emacs使用正确版本的Python,具体取决于我使用的语言?例如,C-c C-c当前运行缓冲区,但它总是调用python2.6,即使我正在编写Python 3代码。
答案 0 :(得分:10)
如果您使用的是python-mode.el,可以尝试更改py-which-shell
。为了在每个文件的基础上执行此操作,您可以添加
# -*- py-which-shell: "python3"; -*-
位于文件的第一行 - 如果第一行以#!
开头,则位于第二行。
另一个选择是
# Local Variables:
# py-which-shell: "python3"
# End:
在您的文件的末尾。也许你应该给python3的完整路径而不仅仅是“python3”。
答案 1 :(得分:4)
答案是肯定的。如果你可以将Python 2与Python 3区分开来,那么它就是一个简单的编程问题,可以让emacs做你想做的事。
(define run-python (&optional buffer)
(with-current-buffer (or buffer (current-buffer))
(if (is-python3-p)
(run-python3)
(run-python2))))
(define-key python-mode-map (kbd "C-c C-c") #'run-python)
剩下要做的就是实施is-python3-p
和run-python3
(等等)
答案 2 :(得分:3)
我对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-command。
我还写了/t/min-py.el,它确保使用python-mode.el(ver 5.1.0)而不是python.el。
/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”部分是错误的,这表明正在使用python2而不是python3。当我按下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。
答案 3 :(得分:2)
关于jrockway的评论:
(defun is-python3-p () "Check whether we're running python 2 or 3."
(setq mystr (first (split-string (buffer-string) "\n" t)))
(with-temp-buffer
(insert mystr)
(goto-char 0)
(search-forward "python3" nil t)))
(defun run-python () "Call the python interpreter."
(interactive)
(if (is-python3-p)
(setq py-python-command "/usr/bin/python3")
(setq py-python-command "/usr/bin/python"))
(py-execute-buffer))
如果“python3”位于缓冲区的顶行(通常是shebang),这将调用python3
。出于某种原因,(setq py-pyton-command ...)
一旦您运行py-execute-buffer
一次就不允许您更改版本。除非您来回更改同一缓冲区上的文件,否则这不应成为问题。
答案 4 :(得分:1)
目前python-mode.el
shebang很荣幸。
使用
以交互方式打开Python shellM-x pythonVERSION
M-x python
将调用已安装的默认值。