我在OS X(El Capitan)上使用Python底层shell,每次我向Python进程发送一段代码(使用绑定到python-shell-send-region
的C-c C-r
)时,我都会在Python shell中收到这样的消息:
>>> import codecs, os;
__pyfile = codecs.open('''/var/folders/6j/g9hcs1s17g1dgxr3p_m04rq80000gn/T/py5013kfY''', encoding='''utf-8''');
__code = __pyfile.read().encode('''utf-8''');
__pyfile.close();
os.remove('''/var/folders/6j/g9hcs1s17g1dgxr3p_m04rq80000gn/T/py5013kfY''');
exec(compile(__code, '''/Users/user/Desktop/sample.py''', 'exec'));
我不希望每次调用命令时都显示此消息。Linux上相同版本的Emacs(以及python.el文件)没有这个问题。消息的模板是在python-shell-send-file
函数(在python.el
文件中)中定义的,这本身就令人困惑,因为当我调用python-shell-send-region
时,我看不到该函数是如何调用的。在第一次运行时,我使用以下命令调用Python解释器(版本2.7.10)
/usr/bin/python -i
但它的行为与其他python解释器(通过brew安装)相同。我使用的是Emacs 24.5.1(再次通过brew安装)。我在.emacs
中使用的唯一python模式特定配置与选项卡宽度有关:
(add-hook 'python-mode-hook
(lambda ()
(setq indent-tabs-mode t)
(setq tab-width 2)
(setq python-indent 2)))
如有任何帮助或建议,我们将不胜感激。
编辑和可能的解决方案:
(我发现了这个https://github.com/jorgenschaefer/elpy/issues/1307):
$ easy_install-3.6 gnureadline
$ cd /Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/lib-dynload
$ mv readline.cpython-36m-darwin.so readline.cpython-36m-darwin.so.bak
如果在安装gnreadline fatal error: 'stdio.h' file not found
时出现错误,请尝试xcode-select --install
。
$ source ./your/venv/activate
$ pip install pyreadline
应该自动使用Python。今年早些时候,我在Windows 10上遇到了类似的问题,安装pyreadline作为开发依赖项解决了这个问题