Установка сервера 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
должно работать тоже.