为emacs-jedi安装python服务器

时间:2014-09-21 20:22:51

标签: python python-2.7 emacs emacs-jedi

我正在尝试使用marmalade包管理器按照此处的说明安装Jedi for emacs - http://tkf.github.io/emacs-jedi/latest/。包管理器安装Jedi及其依赖项。但是我无法使用:

安装python服务器
M-x jedi:install-server

因为即使在jedi安装后重新启动emacs后该命令也不可用。唯一可用的命令是:

Possible completions are:
jedi:ac-setup   jedi:complete
jedi:dot-complete   jedi:get-in-function-call
jedi:goto-definition    jedi:goto-definition-next
jedi:goto-definition-pop-marker     jedi:setup
jedi:show-doc   jedi:show-jedi-version
jedi:start-dedicated-server     jedi:stop-server
jedi:toggle-debug-server

我的.emacs有以下内容:

(autoload 'jedi:setup "jedi" nil t)
(add-hook 'python-mode-hook 'jedi:setup)
(setq jedi:complete-on-dot t)

我在Mac OS X上使用emacs。

在我打开任何python文件(我使用python 2.7)的当前状态下,我看到以下内容会自动显示在迷你缓冲区中:

deferred error : (error Server may raise an error : Traceback (most recent call last):
  File "/Users/t_nithyanandan/.emacs.d/elpa/jedi-0.1.2/jediepcserver.py", line 302, in <module>
    main()
  File "/Users/t_nithyanandan/.emacs.d/elpa/jedi-0.1.2/jediepcserver.py", line 298, in main
    jedi_epc_server(**vars(ns))
  File "/Users/t_nithyanandan/.emacs.d/elpa/jedi-0.1.2/jediepcserver.py", line 210, in jedi_epc_server
    import_jedi()
  File "/Users/t_nithyanandan/.emacs.d/elpa/jedi-0.1.2/jediepcserver.py", line 249, in import_jedi
    import jedi
ImportError: No module named jedi
)

我尝试使用其他方法安装jedi,例如el-get,也可以手动安装jedi,但这些似乎甚至都没有。我看到可用的jedi命令甚至比上面列出的要少。

有人可以帮助指出我缺少的东西吗?

感谢。

编辑:我想使用Jedi的主要目的是使用自动完成功能进行python编程,尽管我相信Jedi有许多强大的功能。出于这样的目的,python服务器是必不可少的还是可以解决它?最后,当然,我想利用绝地中的更多功能。

2 个答案:

答案 0 :(得分:8)

我设法通过来自emacs-jedi github的Chris和syohex的帮助解决了这个问题。在追溯到Jedi版本时,他们可以获得信用。

我只是将关于emacs-jedi issue #177的讨论联系起来并粘贴我发现的解决方法,包括我在此过程中遇到的其他问题。

我使用的Marmalade版本安装了更旧的版本。所以我卸载了jedi和相关的依赖项。我将我的存储库设置为MELPA并安装了更新版本的jedi。这发出了命令

M-x jedi:install-server 

可用,而不是之前的情况。

但是,发出该命令会出错

python-environment--make-with-runner: Program named "virtualenv" does not exist.

我确保在.bashrc中将virtualenv的位置添加到PATH中。 所以我查了emacs-jedi issue #158,建议安装exec-path-from-shell。我从MELPA安装了它并添加了行

(when (memq window-system '(mac ns))
  (exec-path-from-shell-initialize))

按照说明操作。

使用上面的行重新启动Emacs会出错:

Symbol's function definition is void: exec-path-from-shell-initialize

所以我在exec-path-from-shell开发下查找了Autoload问题#3(可以在emacs-jedi问题#177的链接中找到这个链接)。根据其中一个解决方案,我重新启动了我的计算机,卸载并重新安装了exec-path-from-shell,这极大地解决了重启之前存在的问题。

现在我检查了emacs是否可以使用

找到virtualenv
M-! which virtualenv

它给出了正确的位置。

然后我跑了:

M-x jedi:install-server 

现在似乎没有遇到麻烦。第一次,有关于设置a的消息

下的默认虚拟环境
/Users/XXX/.emacs.d/.python-environments

除了

Running: pip install --upgrade /Users/XXX/.emacs.d/elpa/jedi-20140321.1323/...Done

但在后续试验中仅显示了pip升级消息。

看到服务器安装没有问题,我关闭并重新启动Emacs并打开了一个python脚本文件。当我开始编辑时,我在迷你缓冲区中收到了这些消息:

Error (jedi): Failed to start Jedi EPC server.
*** You may need to run "M-x jedi:install-server". ***
This could solve the problem especially if you haven't run the command yet
since Jedi.el installation or update and if the server complains about
Python module imports.

auto-complete error: (error Server may raise an error. Use "M-x epc:pop-to-last-server-process-buffer RET" to see full traceback:
/opt/local/Library/Frameworks/Python.framework/Versions/2.7/Resources/Python.app/Contents/MacOS/Python: can't open file '/Users/XXX/.emacs.d/elpa/jedi-0.1.2/jediepcserver.py': [Errno 2] No such file or directory`
)

因此,我意识到我必须发出命令:

M-x jedi:install-server 

每次在打开任何python文件之前启动Emacs。然后我终于能够看到在编辑过程中可以使用自动完成功能。

虽然我每次都可以手动运行上面的命令,但是每当启动Emacs时我都希望从我的.emacs中自动执行。事实证明,我的.emacs

中有以下行
(setq jedi:server-command (list "python" "/Users/XXX/.emacs.d/elpa/jedi-0.1.2/jediepcserver.py"))

在我的.emacs中删除此行后,问题就消失了,jedi现在正在运行。

答案 1 :(得分:1)

Marmalade目前contains jedi version 0.1.2,但您正在查看version 0.2.0alpha2的文档。

documentation for 0.1.2different instructions

  

package.el(Marmalade或MELPA)

     

您可以使用MarmaladeMELPA中的package.el界面安装Jedi.el。由于package.el不支持安装非elisp软件包,因此需要手动安装Python部件(参见下一节)。

然后在下一节中,重要的一点:

  

通过

安装Jedipython-epc      
      
  • make requirements(不需要root权限)或
  •   
  • pip install -r requirements.txt如果您想确定安装Python模块的位置。您需要root权限(即sudo)才能将其安装在系统目录中。
  •   

您应该可以从make requirements目录中执行~/.emacs.d/elpa/jedi-0.1.2/,但pip install epc jedi之类的内容也应该有用。