What combination of python-mode, ipython, (ipython.el) versions / releases and init.el / .emacs.d works?

My goal is to use Emacs 24 as my python editor (there is also a Matlab and R editor, but that is not what my question is about).

(Please let me know if I left any information or I did not say something clearly.)

I managed to configure my packages and the init.el file in such a way that I can get tab completion, fix selection and snippets for python. I am using python-mode.el as my python mode. All the problems are related to this: I want to use ipython as my python shell to use its tab completion functions when debugging scripts.

  • However, when I start ipython (using Mx ipython), I have no tab completion. In addition, he does not show "[1] in:", however he shows "[1]:".
  • I would like to make ipython my default shell in Emacs. However, attempts to this fail (for example, installing C: \ PATH \ TO \ IPython.exe on the py-python command).
  • When I try to run my python script using Cc Cc, it starts using normal Python and really stops at the position that I am telling the debugger to stop (I am using ipdb.set_trace). however, when I use a different type of command that should start IPython (for example, setting an area in my entire script and running py-execute-region-ipython), IPython does not work. It starts the IPython shell, or at least it seems, but I can just enter the shell like it was a text editor (fyi: in the mini-buffer it shows “Comint: run shell-compile”).

My question is : What combination of package versions and lisp code in my init.el file should allow me to use ipython with tab completion as my default shell in Emacs? I am ready to refuse some packages if necessary.

Additional information :

From what I read on the Project Python-mode.el page, I understand that there are still some bugs regarding IPython with the latest version of this package, so you probably need to use the old version. I searched a lot for solutions, and I could not find one that works for me.

I run

My init.el looks like (python stuff is at the bottom):

 ;; Requisites: Emacs >= 24 (require 'package) (package-initialize) (add-to-list 'package-archives '("melpa" . "http://melpa.milkbox.net/packages/")) (add-to-list 'package-archives '("marmalade" . "http://marmalade-repo.org/packages/") t) (package-refresh-contents) (defun install-if-needed (package) (unless (package-installed-p package) (package-install package))) ;; make more packages available with the package installer --> ;; removed python mode since the version I got had errors (setq to-install '( ;python-mode magit yasnippet jedi auto-complete autopair find-file-in-repository flycheck)) (mapc 'install-if-needed to-install) ;;------------R STUFF----------- (add-to-list 'load-path "C:\\emacs-24.3\\site-lisp\\ess-13.09-1") (setq ess-use-auto-complete t) (load "ess-site") ;;------------MatLab STUFF----------- ; add folder of matlab-mode.el (add-to-list 'load-path "C:\\Users\\Rob Ter Horst\\AppData\\Roaming\\.emacs.d\\elpa\\matlab-mode-20130829.142") (load-library "matlab-load") (matlab-cedet-setup) (setq matlab-show-mlint-warnings t) (add-hook 'matlab-mode-hook 'auto-complete-mode) (add-hook 'matlab-mode-hook 'mlint-minor-mode) ;;------------GENERAL STUFF----------- ; Ido mode: Ido-powered versions of code. Most ido commands are named ido-xxxxx ; so find-file becomes ido-find-file, and so on. (setq ido-enable-flex-matching t) (setq ido-everywhere t) (ido-mode t) (global-linum-mode t) ;Use y or n always instead of yes/no (defalias 'yes-or-no-p 'y-or-np) ;; -------------------- extra nice things Andrea Crotti-------------------- ;; use shift to move around windows (windmove-default-keybindings 'shift) (show-paren-mode t) ; Turn beep off (setq visible-bell nil) (custom-set-variables '(ansi-color-names-vector ["#242424" "#e5786d" "#95e454" "#cae682" "#8ac6f2" "#333366" "#ccaa8f" "#f6f3e8"]) '(custom-enabled-themes (quote (wheatgrass)))) (custom-set-faces ;; custom-set-faces was added by Custom. ;; If you edit it by hand, you could mess it up, so be careful. ;; Your init file should contain only one such instance. ;; If there is more than one, they won't work right. ) (put 'downcase-region 'disabled nil) ;;------------PYTHON STUFF----------- ;(require 'magit) ;(global-set-key "\C-xg" 'magit-status) (require 'auto-complete) (require 'autopair) (require 'yasnippet) (require 'jedi) ;yasnipped settings (setq yas-snippet-dirs '("C:\\Users\\Rob Ter Horst\\AppData\\Roaming\\.emacs.d\\elpa\\yasnippet-20140106.1009\\snippets")) (add-to-list 'load-path "C:\\Users\\Rob Ter Horst\\AppData\\Roaming\\.emacs.d\\elpa\\yasnippet-20140106.1009") (global-set-key [f7] 'find-file-in-repository) ; auto-complete mode extra settings (setq ac-auto-start 2 ac-override-local-map nil ac-use-menu-map t ac-candidate-limit 20) ;; ;; Python mode settings (setq py-install-directory "C:\\Users\\Rob Ter Horst\\AppData\\Roaming\\.emacs.d\\self_installed\\python-mode.el-6.1.3") (add-to-list 'load-path py-install-directory) (add-to-list 'auto-mode-alist '("\\.py$" . python-mode)) (when (featurep 'python) (unload-feature 'python t)) (require 'python-mode) (setq py-electric-colon-active t) (add-hook 'python-mode-hook 'autopair-mode) (add-hook 'python-mode-hook 'yas-minor-mode) (add-hook 'python-mode-hook 'auto-complete-mode) ;; ;; Jedi settings ;; It also required to run "pip install --user jedi" and "pip ;; install --user epc" to get the Python side of the library work ;; correctly. ;; With the same interpreter you're using. ;; if you need to change your python intepreter, if you want to change it ;; (setq jedi:server-command ;; '("python2" "/home/andrea/.emacs.d/elpa/jedi-0.1.2/jediepcserver.py")) (add-hook 'python-mode-hook (lambda () (jedi:setup) (jedi:ac-setup) (local-set-key "\C-cd" 'jedi:show-doc) (local-set-key (kbd "M-SPC") 'jedi:complete) (local-set-key (kbd "M-.") 'jedi:goto-definition))) ; ipython settings (setq py-python-command "C:\\Python27\\Scripts\\ipython.exe") (setq py-complete-function 'ipython-complete py-shell-complete-function 'ipython-complete py-shell-name "ipython" py-which-bufname "IPython") ;(require 'ipython) ;With tab autocompletion in ipdb I get an error that might be solved by changing this var ;the error: "variable binding depth exceeds max-specpdl-size" (setq max-specpdl-size 32000) ; Try to add flycheck --> flycheck causes emacs to become incredibly slow on big script with ; many style errors (as present in a lot of my older scripts, so I do not want to activate it ; by default ;(setq flycheck-highlighting-mode 'lines) ;(add-hook 'python-mode-hook 'global-flycheck-mode) ;(flycheck-select-checker 'python-flake8) ;(provide 'init-flycheck) (yas-reload-all) 

code>

+6
source share
3 answers

With Emacs24, I use the default python.el (not python-mode.el), which started on github .

  • when I start ipython using python-shell-switch-to-shell or Cc Cp (Python menu → start interpreter), I get ipython. Shutdown tabs.

  • ipython - default python interpreter (see my initialization file)

  • when I started the ipython shell, I can send it a file or a selected area (commands are available in the menu), and it will be correctly evaluated.

As a side note, you can run jedi autocomplete using jedi:setup when you are in the python shell. It gives nice popups with help and doc options, and you can shoot at a point (instead of three characters). See IPython auto-complete emacs24 does not work . This can be seen as an addition, not a replacement for ipython.

Following my configuration:

 ;; trying ipython tab completion: that works :) (setq python-shell-interpreter "ipython" python-shell-interpreter-args "" python-shell-prompt-regexp "In \\[[0-9]+\\]: " python-shell-prompt-output-regexp "Out\\[[0-9]+\\]: " python-shell-completion-setup-code "from IPython.core.completerlib import module_completion" python-shell-completion-module-string-code "';'.join(module_completion('''%s'''))\n" python-shell-completion-string-code "';'.join(get_ipython().Completer.all_completions('''%s'''))\n" ) 

taken from http://www.emacswiki.org/emacs/PythonProgrammingInEmacs#toc5

Hope this helps.

+3
source

In the IPython shell, since python-mode.el provides it with TAB py-indent-line calls. Thus, cyclic indentation works like in a script buffer. The completion is M-TAB . You can override these keys.

+1
source

I do not use Emacs (I am a VIM fan), but usually when ipython does not complete the tab, it means that the readline module is missing https://pypi.python.org/pypi/readline/6.2.2

-1
source

All Articles