Установка сервера Python для emacs-jedi

Я пытаюсь установить Jedi для emacs, используя менеджер пакетов marmalade, следуя инструкциям здесь - http://tkf.github.io/emacs-jedi/latest/. Менеджер пакетов устанавливает Jedi вместе с его зависимостями. Но я не могу установить сервер Python, используя:

M-x jedi:install-server

потому что эта команда недоступна даже после перезапуска emacs после установки jedi. Единственные доступные команды:

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)

Я использую emacs на Mac OS X.

В этом текущем состоянии, когда я открываю любой файл 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
)

Я пытался установить джедай, используя другие методы, такие как el-get, а также вручную, но те, кажется, даже не зашли так далеко. Я вижу, что доступные команды джедаев даже меньше, чем указано выше.

Может ли кто-нибудь помочь указать, что мне не хватает?

Благодарю.

Изменить: Основная цель, которую я хотел бы использовать Jedi, состоит в том, чтобы использовать функции автозаполнения для программирования на Python, хотя я считаю, что Jedi имеет много мощных функций. Для этого важен ли сервер Python или можно обойти его? В конце концов, конечно же, я хотел бы воспользоваться многими другими функциями джедая.

2 ответа

Решение

Мне удалось решить эту проблему благодаря помощи Криса и syohex из emacs-jedi github. Им принадлежит заслуга в отслеживании этого до версии джедая.

Я просто связываю обсуждение проблемы emacs-jedi #177 и вставляю найденный мной обходной путь, включая другие проблемы, с которыми я столкнулся на этом пути.

Я использовал версию Marmalade, которая устанавливает гораздо более старую версию. Поэтому я удалил джедаев и связанные с ними зависимости. Я установил свой репозиторий на MELPA и установил гораздо более свежую версию джедая. Это сделало команду

M-x jedi:install-server 

доступно, чего не было раньше.

Однако при выдаче этой команды произошла ошибка

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

Я удостоверился, что добавил местоположение virtualenv в PATH в моем.bashrc. Итак, я посмотрел на выпуск emacs-jedi #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

Итак, я посмотрел проблему № 3 для автозагрузки в процессе разработки exec-path-from-shell (ссылку на это можно найти в ссылке для выпуска № 177 emacs-jedi). Следуя одному из решений, я перезагрузил компьютер, удалил и переустановил exec-path-from-shell, что волшебным образом решило проблему, существовавшую до перезагрузки.

Теперь я проверил в Emacs, можно ли найти virtualenv с помощью

M-! which virtualenv

Это дало правильное местоположение.

Затем я побежал:

M-x jedi:install-server 

который теперь, казалось, бежал без проблем. В первый раз были сообщения о настройке виртуальной среды по умолчанию в

/Users/XXX/.emacs.d/.python-environments

Кроме того

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

но в последующих испытаниях отображалось только сообщение об обновлении пункта.

Убедившись, что сервер установлен без проблем, я закрыл и перезапустил 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 

каждый раз, когда я запускаю Emacs перед открытием любого файла python. Тогда я наконец-то смог увидеть функции автозаполнения, доступные во время редактирования.

Хотя я могу запускать вышеупомянутую команду каждый раз вручную, я хотел автоматизировать ее из моего.emacs при каждом запуске Emacs. Оказалось, что у меня была следующая строка в моем.emacs

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

После удаления этой строки в моем.emacs проблема исчезла, и теперь джедай работает.

Мармелад в настоящее время содержит jedi версия 0.1.2, но вы смотрите документацию для версии 0.2.0alpha2.

Документация для 0.1.2 имеет разные инструкции:

package.el (мармелад или MELPA)

Вы можете установить Jedi.el, используя интерфейс package.el от Marmalade или MELPA. Так как package.el не поддерживает установку пакетов не-elisp, вам нужно установить часть Python вручную (см. Следующий раздел).

И затем в следующем разделе, важный момент:

Установите джедая и python-epc

  • make requirements (нет необходимости в корневых привилегиях) или
  • pip install -r requirements.txt если вы хотите определить, где устанавливать модули Python. Вам нужны права суперпользователя (т.е. sudo) установить его в системный каталог.

Вы должны быть в состоянии сделать make requirements от ~/.emacs.d/elpa/jedi-0.1.2/ каталог, но что-то вроде pip install epc jedi должно работать тоже.

Другие вопросы по тегам