分享

emacs:emacs23下搭建python开发环境 [杂乱的维基]

 不打酱油 2010-11-02

1. 功能实现

  • 编辑(emacs)
  • 调试(Pydb)
  • 代码补全(Pymacs+Pycomplete)
  • 可以tab补全的python shell(ipython)
  • 测试(doctest)
  • 代码检查(pylint+flymake)

2. 插件准备

  • python-mode-1.0.tar.gz(http:///project/showfiles.php?group_id=86916):虽然emacs自带python.el的扩展,但是我觉得这个可能要全一些,里面还有pycompelte.el和doctest.el两个插件
  • pymacs(http://pymacs./archives/Pymacs.tar.gz):让Python和emacs lisp交互的插件
  • pylint(http://www./857):python代码检查的工具,很强大(可以和flymake搭档进行语法的即时检查),需要另外两个python模块才能运行:logilab-astng和logilab-common才能运行,这两个模块和pylint在同一个网站下载
  • ipython(http://ipython.):一个比python自带的shell功能更强大的shell,可以tab补全和语义感知,添加pyreadline模块之后可以记录history
  • pydb(http://bashdb./pydb/):可以和emacs结合的pydb工具,同时还可以下载bashdb进行shell脚本的调试

3. 安装过程

如果使用Archlinux的话,可以直接通过yaourt查找这些插件,都可以直接安装的。

  • 分别解压pymacs,pylint,ipython,loglab-astng,logilab-common安装,安装命令都是:

python setup.py install

  • 安装pydb,我在gentoo上安装的时候它总是和emacs关联,导致安装失败,不得不修改Makefile文件,然后手动把*.el文件拷贝到 emacs的lisp目录里(bashdb也是同样的安装方法)

./configure & make & make install

  • 解压python-mode-1.0.tar.gz,把所有的.el文件copy到lisp directory
  • 另外把pymacs里的pymacs.el、pylint里的pylint.el以及pydb里emacs目录下的.el文件(假如你和我一样出现同样的问题,否则安装pydb的时候那些el文件已经被安装)拷贝到lisp directory
  • 下载py-complete.el放到lisp direcotry
  • 把pymacs下的pycomplete.py 放入python默认的模块路径下面,例如:/usr/lib/python2.4/site-packages
  • 下载epylint,放在/usr/bin or /usr/local/bin目录下,记得chmod +x 加上执行权限,这样就可以配合flymake进行即使语法检查了

注意:pymacs可能和python2.5不兼容,我原来装的是2.5后来因为pamacs用不了,不得不换回2.4

4. 文件配置((这里使用的lisp directory为/usr/share/emacs/site-lisp/site-start.d))

;;这里路径换为你自己的lisp目录,可以使用emacs-lisp-byte-compile命令编译之后再加载
(load "/usr/share/emacs/site-lisp/site-start.d/python-mode.el")
(add-to-list 'load-path "/usr/share/emacs/site-lisp/site-start.d/pymacs.el")
 
;;load pydb
(require 'pydb)
(autoload 'pydb "pydb" "Python Debugger mode via GUD and pydb" t)
 
;;load pymacs
(autoload 'pymacs-load "pymacs" nil t)
(autoload 'pymacs-eval "pymacs" nil t)
(autoload 'pymacs-apply "pymacs")
(autoload 'pymacs-call "pymacs")
 
(require 'pycomplete)
(autoload 'py-complete-init "py-complete")
(add-hook 'python-mode-hook 'py-complete-init)
(autoload 'jython-mode "python-mode" "Python editing mode." t)
(autoload 'py-shell "python-mode" "Start an interactive Python interpreter in another window." t)
(autoload 'doctest-mode "doctest-mode" "Editing mode for Python Doctest examples." t)
(autoload 'py-complete "pycomplete" "Complete a symbol at point using Pymacs." t)
(add-to-list 'auto-mode-alist '("\\.py$" . python-mode))
(add-to-list 'auto-mode-alist '("\\.doctest$" . doctest-mode))
(add-to-list 'interpreter-mode-alist '("python" . python-mode))
(add-to-list 'interpreter-mode-alist '("jython" . jython-mode))
 
;;define some keys
(require 'comint)
(define-key comint-mode-map [(meta p)]
'comint-previous-matching-input-from-input)
(define-key comint-mode-map [(meta n)]
'comint-next-matching-input-from-input)
(define-key comint-mode-map [up]
'comint-next-input)
(define-key comint-mode-map [down]
'comint-previous-input)
 
;;set ipython as the shell
(setq ipython-command "/usr/bin/ipython")
(require 'ipython)
 
(load-library "pylint")
;; use flymake with pylint
(when (load "flymake" t)
(defun flymake-pylint-init ()
(let* ((temp-file (flymake-init-create-temp-buffer-copy
'flymake-create-temp-inplace))
(local-file (file-relative-name
temp-file
(file-name-directory buffer-file-name))))
(list "epylint" (list local-file))))
 
(add-to-list 'flymake-allowed-file-name-masks
'("\\.py\\'" flymake-pylint-init)))

5. 使用方法

  • pydb的使用和gdb的一样,快捷键仍然生效
  • 按键M-i可以补全代码,另外通过C-tab也可调用hippe-expand进行代码补全
  • ipython里面tab键可进行补全
  • F1调用pylint进行代码检查,假如绑定flymake的话,可通过C-x `移动到下一个错误的地方
 

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多