在Emacs中指定来自虚拟环境的Python解释器
今天我在尝试把更多与Python相关的功能加入到我的Emacs配置中,但运气不太好。
首先,我注意到Emacs的启动方式不同(从终端启动和从桌面启动),它选择的解释器也不一样。
从KDE菜单启动时,输入 M-! which python 会显示
/usr/bin/python
从终端启动时,输入 M-! which python 会显示
~/local/bin/python
我可以理解这一点,因为我的 .bashrc 文件把 ~/local/bin 加入了路径,而KDE默认可能忽略了这一点。我可以找到解决办法,但我不明白的是,当我激活一个虚拟环境时,我本来期待 M-! which python 会指向 ~/project.env/bin/python,但它仍然指向 ~/local/bin/python。
因此,当我输入 M-x py-shell 时,它使用的是 ~/local/bin/python,所以如果我在一个虚拟环境中的模块上尝试 M-x py-execute-buffer,py-shell 会抱怨说它不知道虚拟环境中的模块。
把 py-python-command 设置为 "~/project.env/bin/python" 在加载完所有内容后似乎没有任何效果。
所以,我的问题的核心是,如何让所有与Python相关的Emacs功能指向正确的解释器呢?
2 个回答
有一个Emacs的virtualenv模式。这个模式需要Emacs版本在23.1或更高。
这个模式是一个小功能,可以用来为Python的命令行设置虚拟环境,使用的是virtualenv。它支持python-mode.el和python.el这两种模式。
看起来,python-shell 能够正确地获取环境设置,而 py-shell 就做得不好。python-shell 是由 python.el 提供的,而 py-shell 是由 python-mode.el 提供的。关于这个问题已经有一些错误报告等等,所以我暂时不打算使用 py-shell。我想把这个问题说清楚,以防谷歌机器因为某种原因把它当作高排名的内容。