在emacs中设置适当版本的Python和PYTHONPATH变量

men*_*nch 4 python emacs pythonpath

我正在尝试学习用于Python的Emacs开发,并且我发现我的一些项目由于模块导入问题而无法工作,即SciPy或NumPy未导入.我已经尝试过针对这里提出的相关问题提出的解决方案,比如更改PYTHONPATH环境变量,但没有一个是好的.在使用IDLE和终端的普通解释器时比较了sys.path我已经找到了不同的版本:IDLE中的Python-2.7.3

Python 2.7.3 (default, Aug  1 2012, 05:14:39) 
[GCC 4.6.3] on linux2
Type "copyright", "credits" or "license()" for more information.
==== No Subprocess ====
>>> from pprint import pprint as pp
>>> import sys
>>> pp(sys.path)
['/home/mench',
'/usr/bin',
'/usr/lib/python2.7',
'/usr/lib/python2.7/plat-linux2',
'/usr/lib/python2.7/lib-tk',
'/usr/lib/python2.7/lib-old',
'/usr/lib/python2.7/lib-dynload',
'/usr/local/lib/python2.7/dist-packages',
'/usr/lib/python2.7/dist-packages',
'/usr/lib/python2.7/dist-packages/PIL',
'/usr/lib/python2.7/dist-packages/gst-0.10',
'/usr/lib/python2.7/dist-packages/gtk-2.0',
'/usr/lib/pymodules/python2.7',
'/usr/lib/python2.7/dist-packages/ubuntu-sso-client',
'/usr/lib/python2.7/dist-packages/ubuntuone-client',
'/usr/lib/python2.7/dist-packages/ubuntuone-control-panel',
'/usr/lib/python2.7/dist-packages/ubuntuone-couch',
'/usr/lib/python2.7/dist-packages/ubuntuone-storage-protocol']
Run Code Online (Sandbox Code Playgroud)

和Python-2.7.2作为默认系统解释器

Python 2.7.2 (default, Mar  1 2012, 22:28:45) 
[GCC 4.4.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> from pprint import pprint as pp
>>> import sys
>>> pp(sys.path)
['',
'/home/mench',
'/opt/alps/lib',
'/usr/local/lib/python27.zip',
'/usr/local/lib/python2.7',
'/usr/local/lib/python2.7/plat-linux2',
'/usr/local/lib/python2.7/lib-tk',
'/usr/local/lib/python2.7/lib-old',
'/usr/local/lib/python2.7/lib-dynload',
'/usr/local/lib/python2.7/site-packages']   
Run Code Online (Sandbox Code Playgroud)

问题是:如何让Emacs使用正确版本的Python?我在Ubuntu 12.04上使用GNU emacs-23.3.1如果我对这个问题的假设是错误的,请纠正我

tkf*_*tkf 6

我认为问题是选择了错误的python可执行文件.通常sys.path,如果以正常方式安装模块(pip,setup.py等),则会正确设置模块.

问题是你已经手动安装了python 2.7.2 ,正常情况下/usr/local/bin是之前/usr/bin$PATH.这就是终端中默认python为2.7.2的原因.要明确告诉Emacs您希望在特定路径中使用python(即/usr/bin/python),您需要为python-mode配置一些Emacs.

有一些用于Emacs的python模式,但我猜你正在使用"旧"python.el,因为你正在使用Emacs 23.要设置python可执行文件,我认为在你的Emacs配置中添加它可以完成这项工作(但我从来没有使用过python-mode所以我不确定它是否有效.):

(setq python-python-command "/usr/bin/python")
Run Code Online (Sandbox Code Playgroud)

在评估此代码后,您需要重新打开python文件.或者只是重新启动Emacs.

如果您使用新的python.el,你必须添加/usr/bin/python-shell-exec-path.如果您使用的是python-mode.el,我想是的(setq py-shell-local-path "/usr/bin/python" py-use-local-default t).