如何把PyCharm改造成支持科学计算(机器学习)的Python IDE

引言

由于Matlab运行效率问题和Python的胶水语言特性,笔者从这学期开始,由Matlab转到了Python环境。 虽然有众多的IDE和各式各样的开发环境,但是始终找不到像Matlab那样的Python开发环境。期间使用过Wing IDE, Canopy, PyCharm, Eclipse + PyDev, Sublime Text, Spyder等环境,但是都难以达到Matlab那种流畅使用的舒适感。其中Spyder是和Matlab最相近的开发环境,基本上也是仿造Matlab的样式进行开发的。但是,Spyder界面太难看,而且Debug非常不方便。 与此同时,PyCharm好看的界面,精确的提示,方便的Debug 功能驱使着我去探索。可惜的是PyCharm并不是专为科学计算开发的IDE,而是为WEB开发设计的。 网上也并没有关于如何将PyCharm改造成科学计算(机器学习)专用IDE的博客。在Google一整天之后,我决定自己动手改造PyCharm,这也是本文写作的目的。

先决条件

  1. PyCharm下载, 可以点击这里查看详细信息。 PyCharm是收费软件,但是有社区版本开源免费下载。如果你有eddu.cn结尾的邮箱,还可以通过这个链接https://www.jetbrains.com/student/ 申请教育版本,一年内完全免费,一年之后可以重复验证!
  2. Python的安装教程已经遍地都是,这里不再赘述,只提供连接。一种方式是利用Anaconda, 或者Canopy等工具包进行打包安装。另外一种方式是命令行(Linux、Mac)或者下载(Windows)安装。鉴于后一种安装方式相对复杂,这里推荐使用前者。安装好python环境之后, 在命令行中运行 python get-pip.py安装pip工具。再运行 pip install ipython安装jpython。Windows用户可能需要切换到Python安装位置下的bin目录才能运行上述命令。
  3. 完成上述安装之后,运行PyCharm即可。先来一张图,
    如何把PyCharm改造成支持科学计算(机器学习)的Python IDE_第1张图片

开始改造

  1. 进入PyCharm的Preference, 点击Colose,确保右侧的“Use IPython If Available”处于选中状态如何把PyCharm改造成支持科学计算(机器学习)的Python IDE_第2张图片
  2. 在菜单栏中,点击 Tools –>> Python Console, 看PyCharm是否已经成功调用ipython。如果不能,可能需要重启系统,或者重新安装ipython。如何把PyCharm改造成支持科学计算(机器学习)的Python IDE_第3张图片
  3. PyCharm 自带的运行/调试功能每次都会在新的进程中执行,和科学计算、机器学习的调试模式不一致。一旦数据量稍大,就得每次载入数据,浪费宝贵的时间。这里我们利用PyCharm的宏来解决。 首先,随便新建一个脚本,写好if __name__ == "__main__":函数,然后单击菜单栏中的Edit –>> Macros –>> Start Macro Recording. 选中编辑器,Ctrl +A (或者 Command +A ) 全选, 鼠标右键菜单中单击 Execute Selection in Console, 再按下右方向键(取消全选状态)。 这个时候,宏就算录制完成了,点击Edit –>> Macros –>> Stop Macro Recording结束录制,并给宏取名Run_Script如何把PyCharm改造成支持科学计算(机器学习)的Python IDE_第4张图片
  4. 进入Preferences,选择Keymap,搜索我们刚刚建立的Run_Script宏,加入快捷键。 (我加的是 Command + B)如何把PyCharm改造成支持科学计算(机器学习)的Python IDE_第5张图片
  5. PyCharm还有一个麻烦的地方,就是Variable Viewer显示了太多的无关变量。虽然Debug模式中有Watches,但是前面已经说明,在普通的机器学习模式下,我们还是希望能像Matlab一样操作数据,因此需要对Varaible Viewer进行Hack。 这里需要改变PyCharm内置的python脚本(Mac用户右键PyCharm,单击Show Package Contents,Linux和Windows直接进入PyCharm的安装目录即可)。打开helpers/pydev/pydevd_xml.py文件,查找到函数入口def frameVarsToXML(frame_f_locals):,这个函数就是对Variable Viewer的数据后端进行操作的函数。我们在type, typeName, resolver = getType(v)之后加入一个判断语句,过滤掉多余的变量,我加入的判断语句如下:
if name.startswith('_') 
        or typeName == 'module' 
        or typeName == 'ExitAutocall' 
        or typeName == 'function' 
        or name =='get_ipython' 
        or name =='In' 
        or name == 'Out': 
             return ''

当然也可以根据自己的需要,过滤掉其他变量。
6. 接下来,就是见证奇迹的时刻了。
如何把PyCharm改造成支持科学计算(机器学习)的Python IDE_第6张图片。实验成功!!!

后记

上述改造其实仅仅是第一步,也有很多不足。 比如Debug模式不能像Matlab一样,在同一个python进程中运行。 无法在普通模式下加入watch。 不过考虑到科学计算的难点主要在于数学公式的实现,而非工程性的代码结构,改造之后的PyCharm基本能够满足我平时编写科学计算的一般需求(执行文件,执行选中行,查看变量键值,实时交互,断点调试,编辑器高函数提醒,编辑器自动补全)。 高级的功能(同一进程调试,交互式命令补全)虽然暂时没有,但也可以通过PyCharm自带的功能进行补充,总的来说已经足够我实现PRML整本书的基础算法了。

你可能感兴趣的:(Python)