IPython 的正确打开方式

前言

接触 IPython 其实已经很久了,但一直把它当做简单的 Python Shell 去用,并没有深入的研究过。直到今天调试程序的时候,发现每次修改完某个文件,都需要退出然后再进入 IPython 环境,重新导入一次模块才会生效。来回几次感觉自己特别傻,这样调试一点也不“优雅”,Google 了下才发现 IPython 里有个 autoreload 命令,可以自动监测文件改动,然后重新载入。很多时候效率低其实不是工具不好,是不会用。今天就整理一下 IPython 中的一些常用命令。

自动重载

autoreload 主要用途是在用户执行代码块之前重新加载模块。使用效果如下:

In [1]: %load_ext autoreload

In [2]: %autoreload 2

In [3]: from foo import some_function

In [4]: some_function()
Out[4]: 42

In [5]: # open foo.py in an editor and change some_function to return 43

In [6]: some_function()
Out[6]: 43

如上所示在修改完某个文件后再次调用同一方法,返回的结果不同,也不需要退出交互环境。但下次进入 IPython 的时候还是需要敲 autoreload 命令,所以我们可以再修改一下 IPython 的配置文件,让它每次启动的时候,自动执行 autoreload 命令。

如果之前没有配置过 IPython ,可以使用如下命令新建配置文件:

ipython profile create

如果之前配置过,可以在 ~/.ipython/profile_default/ 中(默认)修改之前的配置文件,一般命名为 ipython_config.py

在配置文件中做如下修改:

## lines of code to run at IPython startup.
c.InteractiveShellApp.exec_lines = ['autoreload 2']

## A list of dotted module names of IPython extensions to load.
c.InteractiveShellApp.extensions = ['autoreload']

这样就可以优雅的调试了😁

常用命令

下面介绍一些常用的命令:

- run       运行 Python 脚本,每次都从磁盘读取,和导入模块不同
- edit      调用编辑器进行编辑(可以配置是 Vim 还是 Emacs)
- debug     调用 pdb 调试程序,可以通过参数设置断点
- history   检查历史输入和输入,可以通过配置保存输出历史记录
- cd        更改当前工作目录
- timeit    程序执行时间
- alias     定义系统命令别名
- autocall  使函数可以不用输入括号来调用
- bookmark  将某个目录设置为书签,下次可以直接使用 cd -b 进入
- env       获取、设置或列出环境变量
- lsmagic   列出可用的魔术功能
- pdb       控制 pdb 调试器,具体参考 pdb 用法
- pwd       返回当前工作目录
- recall    重复一个命令
- rehashx   获取 $PATH 中所有别名
- who       打印所有交互式变量