- 引言
- 本书涉及的内容
- 第 1 部分 Python 开发入门
- 第 1 章 Python 入门
- 第 2 章 开发 Web 应用
- 第 3 章 Python 项目的结构与包的创建
- 第 4 章 面向团队开发的工具
- 第 5 章 项目管理与审查
- 第 6 章 用 Mercurial 管理源码
- 第 7 章 完备文档的基础
- 第 8 章 模块分割设计与单元测试
- 第 9 章 Python 封装及其运用
- 第 10 章 用 Jenkins 持续集成
- 第 11 章 环境搭建与部署的自动化
- 第 12 章 应用的性能改善
- 第 13 章 让测试为我们服务
- 第 14 章 轻松使用 Django
- 第 15 章 方便好用的 Python 模块
- 附录 A VirtualBox 的设置
- 附录 B OS(Ubuntu)的设置
1.3 编辑器与辅助开发工具
本节将介绍编写 Python 代码时可用的编辑器,以及一些有助于开发的小贴士和 Python 模块。
1.3.1 编辑器
编写 Python 代码自然少不了编辑器。当今世上的编辑器种类繁多,但编写 Python 代码的编辑器必须具备下列几项功能。
· 语法高亮
将语法设置高亮是一项十分重要的功能。用特殊字色或字体表示关键词可以让编程人员快速发现拼写类错误。这样一来,我们便能够在编写代码的过程中注意并修正此类错误。
· 智能缩进
自动根据语法添加缩进的功能。特别是对于Python这类缩进具有重要意义的语言,编辑器适时地自动缩进要比手动插入空格时的编程效率高得多。
· 执行 DEBUG
在编辑器上执行DEBUG的功能。比如在编程过程中遇到某些问题时,如果能直接使用编辑器进行DEBUG,那么将能更快地找出原因,提高解决问题的效率。
· 可以使用静态解析类插件
能在编辑器上执行静态解析类插件的功能。如果能直接在编辑器内执行语法高亮无法查出的键入错误、语法错误、编码格式检查等,将能省去每次开关编辑器的麻烦,大幅削减修改时消耗的时间。
这里将按照上述 4 点,给各位介绍 3 个编辑器(Vim、Emacs、PyCharm)的使用方法和功能。
各位可以以此为参考来寻找自己用着顺手的编辑器。
◉ Vim
Vim 是一款功能强大的文本编辑器,默认搭载在许多 OS 上,普及度很高。
Vim 可以通过内置的 Vim script 脚本语言进行功能扩展,因此存在许多插件。
· 语法高亮
默认捆绑Python的语法高亮设置文件(python.vim)。
· 智能缩进
有自动缩进的设置选项。缩进时插入的空格数也可以调节。
· 执行 DEBUG
Vim可以在编辑器上调出外部命令,因此可以执行pdb (后述)。比如执行:!/path/to/virtualenv/python -m pdb % 之后,编辑器便会对编辑中的脚本启动调试工具。
· 可以使用静态解析类插件
vim-flake8插件可以检查当前打开的文件并发出问题警告。
Vim 的设置在主目录“.vimrc ”文件中进行,我们写在该文件中的设置将反映在 Vim 上。
现在我们来设置语法高亮和自动缩进(LIST 1.27)。
LIST 1.27 用于 Python 的设置
" 语法高亮的设置 syntax on " 自动缩进的设置 filetype plugin indent on
另外,设置文件本身也可以根据对象文件类型进行分割。下面,我们专门为 Python 脚本准备一个设置文件(LIST 1.28)。
LIST 1.28 准备 Python 专用的设置文件
$ mkdir ~/.vim $ mkdir ~/.vim/ftplugin $ touch ~/.vim/ftplugin/python.vim
我们在这个 python.vim 中进行针对 Python 的设置,以方便编写 Python 代码。
LIST 1.29 将 Tab 改为 4 个空格
" 将“Tab”替换为“空格” setl expandtab " 将“Tab”的“缩进幅度”改为4 setl tabstop=4 " 自动缩进时的“缩进幅度”改为4 setl shiftwidth=4 " 按下键盘“Tab”键时插入的空格数 " 这里设置为0 就可以插入“tabstop”中设置的空格数了 setl softtabstop=0 " 保存时删除行尾的空格 autocmd BufWritePre * :%s/\s\+$//ge "80 个字符换行 setlocal textwidth=80
像 LIST 1.29 这样设置是为了迎合 Python 社区推荐的 PEP 87 编码格式(后述)。
7 https://www.python.org/dev/peps/pep-0008
vim-flake8 是 Vim 的插件,需要进行安装。neobundle.vim8 是一个专门用来管理 Vim 插件的插件,用它可以轻松安装其他 Vim 插件。
8 https://github.com/Shougo/neobundle.vim
安装 neobundle.vim 后,我们在“.vimrc”里这样设置 vim-flake8。
NeoBundle 'nvie/vim-flake8'
现在只要重启 Vim 就会开始安装插件。安装结束后,用 Vim 打开 Python 脚本,按下 Ctrl + F7 就可以看到 flake8 的警告信息了。
NOTE
python.org 官方 Wiki 上也记载着 Vim 的一些设置资料,各位不妨去看一看。
· Vi Improved9
此外,在Vim 官方网站和许多民间社区中都能找到大量关于Vim 的信息。
· Vim online10
· vim-jp11
9 https://wiki.python.org/moin/Vim
◉ Emacs
Emacs 是 Unix 系列 OS 长期沿用的编辑器。该编辑器可以用 Emacs Lisp 语言进行扩展,因此拥有大量插件。如今的 Emacs 已经捆绑了 python.el,安装 Emacs 之后可以直接编写 Python 代码,不必特意去设置。
人们常说 Emacs 是一个环境,不过我们在这里主要是看它作为 Python 编辑器的特征。
· 语法高亮
内置python.el。当global-font-lock-mode 不为nil 时(默认)进行语法高亮。
· 智能缩进
python.el会按照PEP 8的要求缩进到指定位置。
· 执行 DEBUG
Emacs上可以执行pdb 。
先键入M-x pdb ,然后直接在minibuffer里运行类似/path/to/virtualenv/ python -m pdb /path/to/app.py 的pdb命令行。此时会启动pdb专用的缓冲,我们可以在里面查看源码或进行调试。
· 可以使用静态解析类插件
flymake-python-pyflakes 可以在编码过程中高亮警告。
安装完成之后我们在设置文件$HOME/.emacs.d/init.el 中设置 Tab 和空格的执行动作。另外,Emacs 可以让空格和 Tab 文字可视化。在 Python 中,缩进是语法的一部分,所以建议各位先将这些设置好(LIST 1.30)。
LIST 1.30 空格和 Tab 的设置
(require 'whitespace) (setq whitespace-style '(face tabs tab-mark spaces lines-tail empty)) (global-whitespace-mode 1) (setq-default tab-width 4 indent-tabs-mode nil) (setq indent-tabs-mode nil)
flymake-python-pyflakes 等插件并没有捆绑在 Emacs 中,所以我们需要通过 Emacs 的版本控制系统 elpa 进行安装。首先在 $HOME/.emacs.d/init.el 文件中进行如 LIST 1.31 所示的设置。
LIST 1.31 elpa 的程序包版本库设置
(require 'package) (add-to-list 'package-archives '("melpa" . "http://melpa.milkbox.net/packages/")) (add-to-list 'package-archives '("marmalade" . "http://marmalade-repo.org/packages/")) (package-initialize)
通过 elpa 安装好 flymake 和 flymake-python-pyflakes 之后,我们再进行 LIST 1.32 所示的设置。
LIST 1.32 flymake 的设置
(require 'flymake) (require 'flymake-python-pyflakes) (add-hook 'python-mode-hook 'flymake-python-pyflakes-load) (setq flymake-python-pyflakes-executable "flake8")
设置好 flymake,我们编写源码时就能在 Emacs 上看到 flake8 的警告了。
NOTE
python.org 上有设置Emacs 的相关资料。
· Emacs Editor12
另外,我们在其官方网站和许多Wiki 上也能找到大量Emacs 的信息。
· GNU Emacs13 · EmacsWiki14 / · Python Programming In Emacs15
12 https://wiki.python.org/moin/EmacsEditor
13 http://www.gnu.org/software/emacs/emacs.html
15 http://www.emacswiki.org/emacs/PythonProgrammingInEmacs
◉ PyCharm
对长期以来使用 Eclipse 等 IDE(Integrated Development Environment,集成开发环境)进行开发的人来说,IDE 用起来要比编辑器顺手得多。在当今众多的 IDE 中,普及率较高的当属 PyCharm16 了。
16 http://www.jetbrains.com/pycharm/
PyCharm 是一款 2010 年左右问世的 IDE,为 Windows、OS X、Linux 等 OS 提供了相应的安装程序,同时还支持 Python 的 Web 框架 Django。PyCharm 有多种许可证形态,比如付费的 Pro 版和免费的 Community 版等。其中付费的 Pro 版还提供 30 天的免费使用期。
与 Vim 和 Emacs 相比,PyCharm 自带了许多 Python 开发的辅助功能,在安装完之后可以立刻使用。相对地,自行开发插件则需要应用 Java 的知识,所以并不算容易。从这种角度来讲,这款工具可能并不适合极客们使用。
如果各位实在无法适应 Vim 或 Emacs,那么建议先尝试 PyCharm 的 Community 版。它作为编写 Python 时使用的 IDE,具有以下特征。
· 语法高亮
标准功能。PyCharm会根据当前项目使用的Python版本切换语法及内置函数等文字的高亮效果。
PyCharm标准支持Python、HTML、CSS、JavaScript、XML、SQL以及CoffeeScript、Angular JS、LESS、SASS、SCSS等格式的高亮显示。Pro版还支持Django、Mako、Jinja2、Web2py、Chameleon模板的记法。
· 智能缩进
标准功能。PyCharm会按照PEP 8的要求缩进到指定位置。
与语法高亮相同,PyCharm也支持Python以外的其他格式。另外,用户还可以对各个项目的各个语言进行详细设置,比如规定插入Hard Tab还是空格等。
· 执行 DEBUG
标准功能。IDE中可以设置断点、逐句执行、显示执行中的变量值。Pro版可以用手边终端的IDE调试远程服务器上的进程。
· 静态解析类功能
标准功能。在编写代码的过程中,PyCharm会高亮显示对未使用的变量、未定义的名称、已过期函数的警告等。另外,PyCharm在执行解析功能时会从多角度分析Python代码是否存在风险。
导入 PyCharm 之后,我们就可以不再为搭建环境劳神费心了。它为用户标配了大量功能,大部分人都可以在默认设置的状态下轻松使用。不过相对地,一旦习惯了这些懒办法,当极客的乐趣自然也会大打折扣。
PyCharm 也并不适用于所有情况,比如编辑单个文件就很麻烦。这种情况需要先创建一个空项目,把待编辑的文件加入项目之后才能打开编辑。另外,PyCharm 的使用环境建议内存为 2 GB 以上,显示器为 SXGA 以上。
专栏 PyCharm 适合用来干什么
PyCharm3 及之前的版本以提供面向 Web 开发者的辅助功能为主。从 2014 年 11 月发布的 PyCharm4 开始,该系列 IDE 开始内置 IPython notebook 等功能,预计今后会逐步增添科学计算相关的辅助功能。
1.3.2 开发辅助工具
本部分将向各位介绍一些 Python 开发过程中应当了解的模式及 Python 包。
◉ 交互模式
单独执行 python 命令时,该命令会以交互模式执行。交互模式指通过对话方式输入并执行 Python 代码的模式。现在请直接输入 python 命令(LIST 1.33)。
LIST 1.33 启动交互模式
$ python Python 2.7.6 (default, Mar 22 2014, 22:59:56) [GCC 4.8.2] on linux2 Type "help", "copyright", "credits" or "license" for more information. >>>
随后系统会进入等待输入的状态。我们可以在这个状态下直接编写 Python 代码。代码执行后的内容会直接显示在屏幕上(LIST 1.34)。
LIST 1.34 Python 代码执行示例
>>> import sys >>> sys.path ['', '/usr/lib/python2.7', '/usr/lib/python2.7/plat-x86_64-linux-gnu', '/usr/lib/python2.7/lib-tk', '/usr/lib/python2.7/lib-old', '/usr/lib/python2.7/lib-dynload', '/usr/local/lib/python2.7/dist-packages', '/usr/lib/python2.7/dist-packages'] >>>
我们导入了标准模块 sys 并显示了 Python 包的搜索路径列表。
最后一次执行的结果存储在变量“_ ”中,执行它就可以返回相同结果。交互模式让我们能随手轻松地查看代码,方便进行 DEBUG 等操作。如果想结束交互模式,可以按 Ctrl + d 或输入 exit() 。
NOTE
交互模式在启动时会读取环境变量 PYTHONSTARTUP 中设置的文件。如果各位在启动交互模式时想顺便导入些什么,可以在这里进行设置。
另外,IPython 模块可以将 Python 的交互模式用作调试器。该模块可通过 pip 安装。
$ sudo pip install ipython
导入IPython 后,交互模式会实现下述功能。
· TAB 键补全代码
· 使用通常的 Shell 命令
· 与pdb(调试器)联动
◉ flake8(编码格式 / 语法检测)
为更好地规范和优化 Python,人们以社区为中心给 Python 制定了 PEP(Python Enhancement Proposals,Python 增强建议书)17 指导规范。
17 https://www.python.org/dev/peps
其中 PEP 8 主要规范 Python 的编码格式。这里即将介绍的 flake8 模块就可以检查我们的代码是否符合该编码格式。如 LIST 1.35 所示,flake8 可通过 pip 安装。
LIST 1.35 安装 flake8
$ sudo pip install flake8
flake8 不但能检查编码格式,还可以帮助我们找出语法错误以及一些已导入但未被使用的模块并发出警告。
使用方法很简单,只要像 LIST 1.36 一样指定文件并执行 flake8 命令即可。
LIST 1.36 flake8 执行示例
$ flake8 sample.py sample.py:1:12: E401 multiple imports on one line sample.py:1:17: E703 statement ends with a semicolon sample.py:3:1: E302 expected 2 blank lines, found 1 sample.py:4:5: E265 block comment should start with '# ' sample.py:4:80: E501 line too long (83 > 79 characters) sample.py:5:15: E225 missing whitespace around operator
NOTE
由于我们平时使用的是 flake8,所以这里只对它进行了介绍。该类常用的程序包还有 PyLint 等,各位可以根据自己的开发风格选用合适的模块。
◉ pdb(调试器)
最后我们来了解一下 Python 的调试器。如果各位曾经用过 C 语言的 gdb 等调试器,或者对 IDE 等上面附属的调试器有所接触,那么一定不会对插入断点、逐句执行等功能感到陌生。 Python 的调试器也具备这些功能。
pdb 是 Python 的标准模块,不必另外安装。其最简单的用法就是在我们希望程序停止的位置插入如 LIST 1.37 所示的代码。
LIST 1.37 pdb 的插入代码
def add(x, y): return x + y x = 0 import pdb; pdb.set_trace() x = add(1, 2)
执行这个插入了 LIST 1.37 中的代码的 Python 脚本时,脚本会停在上述插入代码的位置,然后启动对话型界面。
LIST 1.38 pdb 执行示例
$ python pdbtest.py > pdbtest.py(7)<module>() -> x = add(1, 2) (Pdb)
本节我们对一些辅助开发的工具、Python 程序包等作了了解。由于涉及范围较广,我们只简单学习了部分使用方法。有关这些工具、程序库的详细信息请各位自行查阅相关文档。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论