热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

【Emacs配置PythonIDE】ConfiguringEmacsasaPythonIDE

0.开头废话在2013年圣诞节期间,我浏览了SwaroopCH写的《AByteofPython》,突然有种相见恨晚的感觉。想起大三大四时候看了两三本Java方面的书籍,云里雾里

0. 开头废话

在2013年圣诞节期间,我浏览了Swaroop C H写的《A Byte of Python》,突然有种相见恨晚的感觉。想起大三大四时候看了两三本Java方面的书籍,云里雾里,不得要领。只记住了《Head First Java》里面比较面向对象和面向过程的一个例子,感性上认识了OOP在开发过程中的便利。目前在读Mark Lutz写的《Learning Python》,有点意外的是,在学习Python的过程中,竟然理解了以前在学习Java过程中的很多疑惑,比如this关键字。虽然目前对Python的学习只是入门,不过隐约中已经感觉到Python这种动态语言的灵活,不管是从开发角度还是从学习角度,都很简洁。

俗话说,工欲善其事,必先利其器。在学习Python之前,不小心上了Emacs这条道。当时只是为了找一款Win7和Ubuntu下都好用的文本编辑器,在尝试了Geany,JEdit,Sublime...等编辑器之后,还是觉得Ubuntu 12.04自带的Emacs确实强大。正好Swaroop C H也写了一篇重回Emacs的博文,于是就看了几章《Sams Teach Yourself Emacs in 24 Hours》,这样Emacs就入门了。

在尝试了Swaroop C H的配置后,只知其然而不知所以然,所以想从零开始,一个一个添加相关功能。刚入门就尝试配置Emacs Python IDE确实有很大挑战,在折腾Emacs过程中也走了不少弯路,所以写下来以备后用。

PS :本来开这个博客是想记录学习过程,不过自从使用了Github Pages,我也有了自己的博客网站,仅以此文作为祭奠,以后所有想法全都写到个人博客上了。目前博客StickMind还很简陋,虽不忍直视,不过还要推荐下,希望同样走在自学道路上的朋友们可以一起交流。点击这里给我发消息

PS 2:本文所谈的配置已很陈旧,其实通篇只是围绕Emacs插件elpy-mode来设置Python支持的,而elpy插件的依赖都有变动,所以可以直接查看elpy-mode官方文档。另外,如果不嫌丑陋,也可以看看我的配置。


1. Python环境

Emacs实现的功能是建立在外部Python环境基础上的,所以在配置Emacs之前,需要安装一些Python模块。

安装pip,很好用的Python包管理工具,用pip安装Python模块很方便。

$sudo apt-get install python-pip #Python2
$sudo apt-get install python3-pip #Python3
 
 

接下来,就可以用pip安装其他模块了:

$sudo pip install elpy rope jedi #Python2
$sudo pip3 install elpy rope_py3k jedi #Python3
 
 

这样elpy、rope、jedi就安装好了

注意:因为我这里pypi被墙了(真坑爹啊),多亏阿里云开源镜像的帮助,可以去这里下载pip最新安装包,目前是pip-1.5.4.tar.gz。手动安装pip如下:

#切换到pip-1.5.4.tar.gz所在目录
$tar -zxvf pip-1.5.4.tar.gz
$cd pip-1.5.4
$sudo python setup.py install #Python2
$sudo python3 setup.py install #Python3

然后按照阿里云开源镜像帮助,更改pip默认安装源。在~/.pip/pip.conf(自建)文件中添加或修改:

[global]
index-url = http://mirrors.aliyun.com/pypi/simple/


2. 配置Emacs

在~/.emacs.d/init.el中初始化package.el并添加插件源:

(require 'package)
(setq package-archives
      '(("gnu" . "http://elpa.gnu.org/packages/")
        ("marmalade" . "http://marmalade-repo.org/packages/")
        ("melpa" . "http://melpa.milkbox.net/packages/")))
(package-initialize)
重启Emacs,使用 M-x package-install [RET] elpy [RET]来安装(RET即Enter键)。也可以使用命令 M-x list-packages获取插件列表,使用 C-s找到 elpy来安装。

然后,在init.el文件中添加如下配置:

;; Configuration of Python IDE
;; https://github.com/jorgenschaefer/elpy
(require 'elpy nil t)
(elpy-enable)

重启Emacs。至此Python IDE就算完成了。新建一个Python文件试试,如下:

emacs

如图状态栏显示(Python Eldoc Elpy yas || Flymake AC),Python模式下已经包含了yasnippet、flymake、auto-complete等插件了。更多配置请参考ELPY文档。


3. 优化Auto-complete:

auto-complete

如图所示,在对列表a输入dot操作符时,Emacs并没有给出相应的列表方法,Mini Buffer里也出现了警告。这是因为elpy默认使用rope的缘故。

可以使用M-x elpy-rpc-set-backend [RET] jedi [RET]命令,将rope改为jedi。这时,输入dot操作符就可以显示列表对应的方法了。

auto-complete

如图所示,auto-complete不仅给出了相应的方法,还给出了该方法的文档。

如果不想每次都使用命令更改elpy-rpc-set-backend,可以在init.el配置文件中添加一行代码:

(setq elpy-rpc-backend "jedi")


4. 使用yasnippet

输入for,然后按TAB键将自动展开for模板:

yasnippet

更多yasnippet用法可以点击状态栏yas查看。


5. 优化Flymake

使用Flymake语法检测,只能在鼠标悬停到错误所在处才能显示具体错误信息,很不方便。特别是在Terminal下根本无法使用。所以我安装了flymake-cursor.el插件,这个插件将错误信息显示在Mini Buffer中,这样就可以避免使用鼠标。该插件不需要配置代码。效果如下:

flymake

使用flymake还有一个好处就是,如果代码不符合PEP8语法规范,也会提示警告信息,这样对养成良好代码规范很有帮助。由于PEP8有些规范比较陈旧,可以通过配置主目录下~/.config/flake8(自建)文件来自定义,参考flake8文档。


6. 运行Python程序

使用C-c C-c命令,Emacs将调出Python交互界面执行当前代码:

RunPython

如果想使用Python3,可以在init.el配置文件中添加一行代码:

(setq elpy-rpc-python-command "python3")
如果想使用IPython,可以在init.el配置文件中添加一行代码:

(elpy-use-ipython)

————————————————————————————————————————————————————————————————

以上介绍的已经够多了,我也不想再写了,更多Emacs技巧可以在网上发现,像Eclipse等IDE能有的功能,Emacs都可以实现。很多优秀的Emacs插件都可以直接通过M-x list-packages安装。一个简单的配置文件,就可以把Python IDE配置好,Emacs也不是那么难啊!

附录

以下是上文介绍的init.el配置文件:

(require 'package)
(setq package-archives
      '(("gnu" . "http://elpa.gnu.org/packages/")
        ("marmalade" . "http://marmalade-repo.org/packages/")
        ("melpa" . "http://melpa.milkbox.net/packages/")))
(package-initialize)

;; Configuration of Python IDE
;; https://github.com/jorgenschaefer/elpy
(require 'elpy nil t)
(elpy-enable)
(setq elpy-rpc-backend "jedi")
(setq elpy-rpc-python-command "python3")
(elpy-use-ipython)
 
 
 
 
 

推荐阅读
author-avatar
好富饶_152
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有