
<p><img src="https://cdn.learnku.com/uploads/images/201804/18/1/Y3P4ys9TjI.jpg?imageView2/2/w/1240/h/0" alt="file" /></p>
<h2>文本编辑器</h2>
<p>任何可以做纯文本编辑的工具都可以用来写Python代码，但是用功能更加强大的文本编辑器可以使你的编程工作更加轻松。</p>
<h3>Vim</h3>
<p>Vim 是一个用键盘快捷键代替菜单和图标来操作的文本编辑器。对于 Vim 编辑器，有几个插件和设置可以用来辅助 Python 开发。如果你只用 Python 开发，一个好的开始就是把缩进和换行的默认设置设置成兼容 <a href="https://www.python.org/dev/peps/pep-0008"><strong>PEP 8</strong></a> 的值。 在你的主目录里，打开一个叫作 <code>.vimrc</code> 的文件并且把下面这些代码添加进去：</p>
<pre><code class=" language-php">set textwidth=79  " 行宽超过 79 会被截断
set shiftwidth=4  " 操作符 &gt;&gt; 缩进 4 列；&lt;&lt; 减少缩进 4 列
set tabstop=4     " 一个 TAB 显示为 4 列
set expandtab     " 用空格代替 TAB
set softtabstop=4 " 敲击 TAB/BACKSPACE 插入 / 删除 4 个空格 
set shiftround    " 缩进为 'shiftwidth' 的倍数
set autoindent    " 新行缩进与上一行对齐
</code></pre>
<p>使用这些设置，行宽超过 79 个字符会自动换行，并且缩进设置为用 4 个空格代替一个制表符。如果你还用 Vim 写其它的语言，有一个很方便的插件 <a href="http://www.vim.org/scripts/script.php?script_id=974">indent</a> ，用来处理 Python 源文件的缩进设置。</p>
<p>还有一个很方便的语法插件 <a href="http://www.vim.org/scripts/script.php?script_id=790">syntax</a>，对 Vim 6.1 里自带的语法文件做了一些增强。</p>
<p>这些插件为你用 Python 开发提供了一个基本环境。你应该充分利用 Vim 去持续检查你的代码是否有语法错误并且是否符合 PEP8 规范。幸运的是有 <a href="https://pypi.python.org/pypi/pycodestyle/">pycodestyle</a> 和 <a href="http://pypi.python.org/pypi/pyflakes/">Pyflakes</a> 来帮你做这些事。如果你的 Vim 编译时附带了 <code>+python</code> ，你也可以使用一些自带的插件非常方便的来做这些检查。</p>
<p>对于 PEP8 和 Pyflakes ，你可以安装 <a href="https://github.com/nvie/vim-flake8">vim-flake8</a>。然后你就可以在 Vim 里把 <code>Flake8</code> 功能映射到任何快捷键或操作上了。这个插件会在屏幕下方显示错误信息，并且提供一个简单的方式来跳转到对应的行。设置成每当你保存文件的时候就调用这个功能会很方便。如果想这样做，添加这行代码到你的 <code>.vimrc</code> ：</p>
<pre><code class=" language-php">autocmd BufWritePost *.py call Flake8()
</code></pre>
<p>如果你已经使用了 <a href="https://github.com/scrooloose/syntastic">syntastic</a> ，你可以把它设置成在写入的时候自动运行 Pyflakes 并且在 quickfix 窗口里显示错误和警告信息。下面是一个在状态栏里显示检查状态和警告信息的示例配置：</p>
<pre><code class=" language-php">set statusline+=%#warningmsg#
set statusline+=%{SyntasticStatuslineFlag()}
set statusline+=%*
let g:syntastic_auto_loc_list=1
let g:syntastic_loc_list_height=5
</code></pre>
<h4>Python-mode</h4>
<p><a href="https://github.com/klen/python-mode">Python-mode</a> 是 Vim 编辑器中一个复杂的编写 Python 代码的解决方案。有以下功能：</p>
<ul><li>让任意的 Python 代码检查工具(<code>pylint</code>, <code>pyflakes</code>, <code>pycodestyle</code>, <code>mccabe</code>) 都能协同工作</li>
<li>使用 Rope 进行代码重构以及自动填写</li>
<li>快速折叠 Python 代码</li>
<li>虚拟环境支持</li>
<li>全文搜索 Python 文档，运行 Python代码</li>
<li>自动使用 <a href="https://pypi.python.org/pypi/pycodestyle/">pycodestyle</a> 修正错误</li>
</ul>

<p>等等。</p>
<h4>SuperTab</h4>
<p><a href="http://www.vim.org/scripts/script.php?script_id=1643">SuperTab</a> 是一个小型的 Vim 插件，可以用 <code>&lt;Tab&gt;</code> 键或者其他的自定义键来方便的完成代码自动填写。</p>
<h3>Emacs</h3>
<p>Emacs 是另一个强大的文本编辑器。它是完全可编程的（lisp），但学习曲线有点陡。 如果您已经是一名 Emacs 的用户了，推荐阅读 EmacsWiki 上的 <a href="http://emacswiki.org/emacs/PythonProgrammingInEmacs">Python Programming in Emacs</a> 。</p>
<ol><li>Emacs 本身支持Python模式。</li>
</ol>

<h3>TextMate</h3>
<p><a href="http://macromates.com/">TextMate</a> 是一个带有苹果操作系统气质的文本编辑器。 巧取了 UNIX 和 GUI 的各自优点，TextMate 将两者中最好的部分带给了脚本专家和新手用户。</p>
<h3>Sublime Text</h3>
<blockquote>
<p><a href="http://www.sublimetext.com/">Sublime Text</a> 是一个设计精良的编辑器，你可以用来编写脚本代码、标记代码和一般的文字编辑。您将会爱上其漂亮的用户界面、非凡的特性和惊人的运行速度。</p>
</blockquote>
<p>Sublime Text has excellent support for editing Python code and uses Python for its plugin API. It also has a diverse variety of plugins, <a href="https://github.com/SublimeLinter/SublimeLinter">some of which</a> allow for in-editor PEP8 checking and code "linting".</p>
<p>Sublime Text 对 Python 代码提供了非常棒的支持，而且其插件系统的 API 也是有 Python 语言编写的。它拥有大量各式各样的插件，  <a href="https://github.com/SublimeLinter/SublimeLinter">其中一些</a>  允许编辑器内的 PEP8 检查和代码错误提示。</p>
<h3>Atom</h3>
<blockquote>
<p><a href="https://atom.io/">Atom</a> 是一款 21 世纪的可定制性极高的文本编辑器。构建于atom-shell上，它拥有我们所喜欢的编辑器的所有优秀特性。</p>
</blockquote>
<p>Atom 是 Web 原生的（HTML、CSS、JS），编辑器核心专注于模块化的设计和插件开发的便捷性。它自带本地包管理和大量的扩展包。Atom 下从事 Python 开发所推荐的插件是 <a href="https://github.com/AtomLinter/Linter">Linter</a> 和 <a href="https://github.com/AtomLinter/linter-flake8">linter-flake8</a> 的组合。</p>
<h2>IDEs</h2>
<h3>PyCharm / IntelliJ IDEA</h3>
<p><a href="http://www.jetbrains.com/pycharm/">PyCharm</a> 由 JetBrains 公司开发，此公司还以 IntelliJ IDEA 闻名。它们都共享着相同的基础代码，PyCharm 中大多数特性能通过免费的 Python 插件带入到 IntelliJ 中。PyCharm 由两个版本：专业版（Professional Edition）（30天试用）和拥有功能相对较少的社区版（Community Edition）（Apache 2.0 License）。</p>
<h3>使用 Visual Studio Code 来编辑 Python</h3>
<p><a href="https://marketplace.visualstudio.com/items?itemName=ms-python.python">Python for Visual Studio</a> 是一款基于 <a href="https://code.visualstudio.com/">Visual Studio Code IDE</a> 的扩展。 它是一个免费的、轻量的、开源的 IDE，支持 Mac、Windows 和 Linux 等主流平台。它以诸如 Node.js 和 Python 等开源技术构建，具有如智能自动补全、本地和远程调试、linting（代码检查）等 引人注目的特性。</p>
<p>MIT licensed.</p>
<h3>Enthought Canopy</h3>
<p><a href="https://www.enthought.com/products/canopy/">Enthought Canopy</a> 是一款专门面向科学家 和工程师的 Python IDE，它预装了为数据分析而用的库。</p>
<h3>Eclipse</h3>
<p>Eclipse 中进行 Python 开发最流行的插件是 Aptana 的 <a href="http://pydev.org/">PyDev</a>。</p>
<h3>Komodo IDE</h3>
<p><a href="http://www.activestate.com/komodo-ide">Komodo IDE</a>  由 ActiveState 开发，并且是能运行在 Windows、Mac 和 Linux 平台上的商业 IDE。<a href="https://github.com/Komodo/KomodoEdit">KomodoEdit</a> 是其开源版本。</p>
<h3>Spyder</h3>
<p><a href="https://github.com/spyder-ide/spyder">Spyder</a> 是一款专门面向 Python科学库（即 <a href="http://www.scipy.org/">Scipy</a>）的 IDE。它集成了 <a href="http://pypi.python.org/pypi/pyflakes/">pyflakes</a> 、 <a href="http://www.logilab.org/857">pylint</a> 和 <a href="https://github.com/python-rope/rope">rope</a> 。</p>
<p>Spyder 是免费开源的，功能包括代码补全、语法高亮、类和函数浏览器，以及对象检查等。</p>
<h3>WingIDE</h3>
<p><a href="http://wingware.com/">WingIDE</a> 是一个专门面向 Python 的 IDE。它能运行在 Linux、Windows 和 Mac 上（作为一款 X11 应用程序，某些 Mac 用户可能会无法使用）。</p>
<p>WingIDE 提供了代码补全、语法高亮、源代码浏览器、图形化调试器的功能，还支持版本控制系统。</p>
<h3>NINJA-IDE</h3>
<p><a href="http://www.ninja-ide.org/">NINJA-IDE</a> 的名称来自递归缩写：”Ninja-IDE Is Not Just Another IDE”， 是一款跨平台的IDE，专为构建 Python  应用而打造，并能运行于 Linux/X11、Mac OS X 和 Windows 桌面操作系统上。从网上可以下载到这些平台的安装包。</p>
<p>NINJA-IDE 是一款开源软件（GPLv3许可），是使用 Python 和 Qt 开发。在 <a href="https://github.com/ninja-ide">GitHub</a> 能下载到源文件。</p>
<h3>Eric (The Eric Python IDE)</h3>
<p><a href="http://eric-ide.python-projects.org/">Eric</a> 是一款功能齐全的Python IDE， 提供源代码自动补全、语法高亮、对版本控制系统的支持、对Python 3 的支持、集成的 Web 浏览器、 Python Shell、集成调试器和灵活的插件系统等功能。它基于 Qt GUI 工具集，使用 Python 编写， 集成了 Scintilla 编辑器控制。Eric 是一款超过 10 年仍活跃开发的开源软件（GPLv3许可）。</p>
<h2>解释器工具</h2>
<h3>虚拟环境</h3>
<p>虚拟环境完整隔离项目包依赖，这意味着您无须全局（系统范围内）安装 Python 工程特定的包， 因此就能避免潜在的版本冲突。</p>
<p>使用时请参阅 <a href="http://github.com/kennethreitz/python-guide/blob/master/docs/dev/virtualenvs.rst">Virtual Environments</a> 文档。</p>
<h3>pyenv</h3>
<p><a href="https://github.com/yyuu/pyenv">pyenv</a> 是一个允许多个 Python 解释器版本同时安装于一台机器的工具。这解决了不同的项目需要不同版本的 Python 的问题。比如，为了兼容性， 可以很容易地为一个项目安装 Python 2.7，而继续使用 Python 3.4 作为默认的解释器。 pyenv 不止限于 CPython 版本——它还能安装 PyPy、anaconda、miniconda、stackless、jython 和 ironpython 解释器。</p>
<p>pyenv 的工作原理是在一个叫做 <code>shims</code> 目录中创建 Python 解释器（以及其他工具像 <code>pip</code> 和 <code>2to3</code> 等）的伪造应用。当系统寻找名为 <code>python</code> 的应用时，它会先在 <code>shims</code> 目录中寻找并使用对应假版本的应用，然后会传递命令到 pyenv 中。 pyenv 再根据环境变量、<code>.python-version</code> 文件和全局默认设置的信息来判断该运行哪个版本的 Python。</p>
<p>pyenv 不是管理虚拟环境的工具，但是有一个叫做 <a href="https://github.com/yyuu/pyenv-virtualenv">pyenv-virtualenv</a> 的插件可以自动化不同环境的创建，而且也能够直接集成到现有的 pyenv 工具中，基于环境变量或者 <code>.python-version</code> 文件，来切换不同的环境。</p>
<h2>其他工具</h2>
<h3>IDLE</h3>
<p><a href="http://docs.python.org/library/idle.html#idle" title="(in Python v3.6)">IDLE</a> 是一个集成的开发环境，它是 Python 标准库的一部分。 它完全由 Python 编写，并使用 Tkinter GUI 工具集。尽管 IDLE 不适用于作为成熟的 Python 开发工具，很多时候我们用来尝试运行简单的 Python 代码片段，或者对 Python 不同特性做一些小实验。</p>
<p>它提供以下特性：</p>
<ul><li>Python Shell 窗口（解释器）</li>
<li>多窗口文本编辑器，支持 Python 代码高亮</li>
<li>最小的调试工具</li>
</ul>
<h3>IPython</h3>
<p><a href="http://ipython.org/">IPython</a> 提供一个丰富的工具集来帮助您最大限度地和 Python 交互。 它主要的组件有：</p>
<ul><li>强大的 Python shell（基于终端和 Qt ）。</li>
<li>一个基于网络的笔记本，拥有相同的核心特性，但是支持富媒体、文本、代码、数学表达式和内联绘图。</li>
<li>支持交互式的数据可视化和 GUI 工具集的使用。</li>
<li>灵活、嵌入的解释器载入到您的工程工程中。</li>
<li>支持高级可交互的并行计算的工具。</li>
</ul>

<pre><code class=" language-php">$ pip install ipython</code></pre>
<p>使用以下命令下载和安装带有所有可选依赖（notebook、qtconsol、tests 和其他功能）的 IPython：</p>
<pre><code class=" language-php">$ pip install ipython[all]</code></pre>
<h3>BPython</h3>
<p><a href="http://bpython-interpreter.org/">bpython</a> 在类 Unix 操作系统中可替代 Python 解释器的接口。 它有以下特性：</p>
<ul><li>内建的语法高亮。</li>
<li>行内输入时的自动补全建议。</li>
<li>Python 函数预期选项提供。</li>
<li>“倒带” 功能 —— 从内存中 pop 出代码的最后一行并重新运行。</li>
<li>将输入的代码发送到 pastebin。</li>
<li>将输入的代码保存到一个文件中。</li>
<li>自动缩进。</li>
<li>支持 Python 3。</li>
</ul>

<pre><code class=" language-php">$ pip install bpython
</code></pre>
<h3>ptpython</h3>
<p><a href="https://github.com/jonathanslenders/ptpython/">ptpython</a> 是一个构建在 <a href="http://github.com/jonathanslenders/python-prompt-toolkit">prompt_toolkit</a> 库之上的 REPL。它被视作是 <a href="http://bpython-interpreter.org/">BPython</a> 的替代。特性包括：</p>
<ul><li>语法高亮</li>
<li>自动补全</li>
<li>多行编辑</li>
<li>Emacs 和 VIM 模式</li>
<li>代码中嵌入的 REPL</li>
<li>语法合法性检测</li>
<li>支持 Tab 页</li>
<li>通过 <code>pip install ipython</code> 安装后运行 <code>ptipython</code>，即可支持集成 <a href="http://ipython.org/">IPython</a> 的 shell：</li>
</ul>

<pre><code class=" language-php">$ pip install ptpython</code></pre>