在Emacs的python-mode中用常规python shell替换常规/ usr / bin / python需要什么?
基本上我有一个二进制文件/ usr / bin / mypython,它在启动python interpreter提示符之前进行一些初始化,并且出于所有交互目的,生成的解释器shell等同于/ usr / bin / python。
但是,如果我在“python-python-command”中指定这个二进制文件(在Emacs 23.3中使用python.el),我会得到“只支持Python版本> = 2.2并支持< 3.0”
答案 0 :(得分:5)
我即将阅读elisp进行检查,但我敢打赌,如果您添加--version
标记,将保存结果设为/usr/bin/python
,则emacs会很高兴。
<强>更新强>
以下是EMACS 23.3.1中python.el第1555及以下代码中的代码:
(defvar python-version-checked nil)
(defun python-check-version (cmd)
"Check that CMD runs a suitable version of Python."
;; Fixme: Check on Jython.
(unless (or python-version-checked
(equal 0 (string-match (regexp-quote python-python-command)
cmd)))
(unless (shell-command-to-string cmd)
(error "Can't run Python command `%s'" cmd))
(let* ((res (shell-command-to-string
(concat cmd
" -c \"from sys import version_info;\
print version_info >= (2, 2) and version_info < (3, 0)\""))))
(unless (string-match "True" res)
(error "Only Python versions >= 2.2 and < 3.0 are supported")))
(setq python-version-checked t)))
它正在做的是运行单线
from sys import version_info;
print version_info >= (2, 2) and version_info < (3, 0)
只打印“True”或“False”。修复你的脚本来处理-c标志,你应该没问题。
或者,您可以将黑客的方式拿出来并将python-version-checked
的值强制为t
,并且它永远不会进行检查。
答案 1 :(得分:1)
最简单的方法就是骗取并告诉python-check-version
它已经检查过:
(setq python-version-checked t)
答案 2 :(得分:0)